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