炸弹人游戏
一、游戲規則
你只有一枚炸彈,但是這枚炸彈威力超強(殺傷距離超長,可以消滅殺傷范圍內所有的敵人)。請問在哪里放置炸彈才可以消滅最多的敵人?
二、題目分析
我們先將這個地圖模型化。墻用#表示,敵人用G表示,空地用 . 表示(當然如果你想換成其他的符號也可以),炸彈只能放在空地上。
############# #GG.GGG#GGG.# ###.#G#G#G#G# #.......#..G# #G#.###.#G#G# #GG.GGG.#.GG# #G#.#G#.#.### ##G...G.....# #G#.#G###.#G# #...G#GGG.GG# #G#.#G#G#.#G# #GG.GGG#G.GG# #############
首先我們需要用一個二維字符數組來存儲這個地圖
分別統計上下左右四個方向上可以消滅的敵人數
向另外幾個方向進行統計的坐標變化如下:
注意,坐標(x,y)指的是第x行第y列。
//向上統計可以消滅的敵人數
while(a[x][y]!='#') //判斷是不是墻,如果不是墻就繼續
{
if(a[x][y]=='G') //如果當前點是敵人
sum++; //計數
x--; //否則繼續向上統計
}
//向下統計可以消滅的敵人數
while(a[x][y]!='#')
{
if(a[x][y]=='G')
sum++;
x++; //繼續向下統計
}
//向左統計可以消滅的敵人數
while(a[x][y]!='#')
{
if(a[x][y]!='G')
sum++;
y--; //繼續向左統計
}
//向右統計可以消滅的敵人數
while(a[x][y]!='#')
{
if(a[x][y]!='G')
sum++;
y++; //繼續向右統計
}
接下來只需要統計在每一個空地上放置炸彈可以消滅的敵人總數。
最終輸出消滅敵人數最多的那個空地的坐標即可。
三、代碼如下
char a[20][21];
int i,j,sum,map=0,p,q,x,y,n,m;
scanf("%d %d",&n,&m); //n表示有多少行字符,m表示每行有多少列
for(i=0;i<=n-1;i++) //讀入n行字符
scanf("%s",a[i]);
for(i=0;i<=n-1;i++)
{
for(j=0;j<=m-1;j++)
{
if(a[i][j]=='.') //判斷這個點是不是平地,是平地才可以被放置炸彈
{
sum=0; //用來計數,表示可以消滅的敵人數,需要初始化
x=i;y=j; //向上統計可以消滅的敵人數
while(a[x][y]!='#') //判斷是不是墻,如果不是墻就繼續
{
if(a[x][y]=='G') //如果當前點是敵人
sum++; //計數
x--; //否則繼續向上統計
}
x=i;y=j; //向下統計可以消滅的敵人數
while(a[x][y]!='#')
{
if(a[x][y]=='G')
sum++;
x++; //繼續向下統計
}
x=i;y=j; //向左統計可以消滅的敵人數
while(a[x][y]!='#')
{
if(a[x][y]!='G')
sum++;
y--; //繼續向左統計
}
x=i;y=j; //向右統計可以消滅的敵人數
while(a[x][y]!='#')
{
if(a[x][y]!='G')
sum++;
y++; //繼續向右統計
}
/*更新map的值*/
if(sum>map) //如果當前點所能消滅的敵人總數大于map
{
map=sum; //則更新map
p=i; //用p,q記錄當前點的坐標
q=j;
}
}
}
}
printf("將炸彈放置在(%d,%d),最多可以消滅%d個敵人
",p,q,map);
return 0;
總結
- 上一篇: 快剪辑怎么裁剪视频画面
- 下一篇: 偏度和峰度的计算