Post by huangno1 on Mar 2, 2017 20:18:03 GMT -8
程式說明
我們將地圖表示為一個 n x n (n <= 10) 的網格,假設萬箭齊發的傷害範圍是中心點以及鄰近範圍共九格,如下圖所示。若施放中心點是 (3, 3),可以打中三個敵兵。本例中,最好的施放中心點是 (4, 5),可以打中五個敵兵。
1 2 3 4 5 6
1 _ _ _ _ _ _
2 _ 敵 _ _ _ _
3 _ _ _ 敵 _ _
4 _ _ _ 敵 敵 敵
5 _ _ _ _ _ 敵
6 _ _ _ _ _ _
現在我們會輸入地圖上敵兵的位置資料:0表示無敵兵,1表示有,請輸出萬箭齊發的中心點應該設在何處才能打中數量最多的敵兵。如果有多個位置都符合可擊中最多數量敵兵的條件,輸出列座標較小的,若列座標相同,輸出行座標較小的。注意最左上角的座標定為 (1, 1)。
【範例輸入一】
3
0 1 0
1 0 0
0 0 0
【範例輸出一】
Release at (1, 1)! Shoot~
【範例輸入二】
6
0 0 0 0 0 0
0 1 0 0 0 0
0 0 0 1 0 0
0 0 0 1 1 1
0 0 0 0 0 1
0 0 0 0 0 0
【範例輸出二】
Release at (4, 5)! Shoot~
#include <stdio.h>
int main()
{
int n, i, j, k, x, sum = 0, max = 0;
scanf ( "%d", &n ) ;
int posx = 1, posy = 1 ;
int f [ 12 ] [ 12 ] = {};
for ( i = 1 ; i <= n ; i ++ )
{
for ( j = 1 ; j <= n ; j ++ )
{
scanf ( "%d", &f [ i ] [ j ] ) ;
}
}
for ( i = 1 ; i <= n ; i ++ )
{
for ( j = 1 ; j <= n ; j ++ )
{
sum = 0;
// printf ( " %d %d\n" , i , j ) ;
for ( k = -1 ; k <= 1 ; k ++ )
{
for ( x = -1 ; x <= 1 ; x ++ )
{
if ( f [ i + k ] [ j + x ] > 0 )
{
sum ++ ;
}
}
}
// printf ( " sum %d\n" , sum ) ;
if ( sum > max )
{
max = sum ;
posx = i ;
posy = j ;
}
}
}
printf("Release at (%d, %d)! Shoot~\n", posx, posy);
return 0;
}
我們將地圖表示為一個 n x n (n <= 10) 的網格,假設萬箭齊發的傷害範圍是中心點以及鄰近範圍共九格,如下圖所示。若施放中心點是 (3, 3),可以打中三個敵兵。本例中,最好的施放中心點是 (4, 5),可以打中五個敵兵。
1 2 3 4 5 6
1 _ _ _ _ _ _
2 _ 敵 _ _ _ _
3 _ _ _ 敵 _ _
4 _ _ _ 敵 敵 敵
5 _ _ _ _ _ 敵
6 _ _ _ _ _ _
現在我們會輸入地圖上敵兵的位置資料:0表示無敵兵,1表示有,請輸出萬箭齊發的中心點應該設在何處才能打中數量最多的敵兵。如果有多個位置都符合可擊中最多數量敵兵的條件,輸出列座標較小的,若列座標相同,輸出行座標較小的。注意最左上角的座標定為 (1, 1)。
【範例輸入一】
3
0 1 0
1 0 0
0 0 0
【範例輸出一】
Release at (1, 1)! Shoot~
【範例輸入二】
6
0 0 0 0 0 0
0 1 0 0 0 0
0 0 0 1 0 0
0 0 0 1 1 1
0 0 0 0 0 1
0 0 0 0 0 0
【範例輸出二】
Release at (4, 5)! Shoot~
#include <stdio.h>
int main()
{
int n, i, j, k, x, sum = 0, max = 0;
scanf ( "%d", &n ) ;
int posx = 1, posy = 1 ;
int f [ 12 ] [ 12 ] = {};
for ( i = 1 ; i <= n ; i ++ )
{
for ( j = 1 ; j <= n ; j ++ )
{
scanf ( "%d", &f [ i ] [ j ] ) ;
}
}
for ( i = 1 ; i <= n ; i ++ )
{
for ( j = 1 ; j <= n ; j ++ )
{
sum = 0;
// printf ( " %d %d\n" , i , j ) ;
for ( k = -1 ; k <= 1 ; k ++ )
{
for ( x = -1 ; x <= 1 ; x ++ )
{
if ( f [ i + k ] [ j + x ] > 0 )
{
sum ++ ;
}
}
}
// printf ( " sum %d\n" , sum ) ;
if ( sum > max )
{
max = sum ;
posx = i ;
posy = j ;
}
}
}
printf("Release at (%d, %d)! Shoot~\n", posx, posy);
return 0;
}