题目背景 Background
元首怒了!!
题目描述 Description
自从德军撕毁条约进攻苏联后,斯大林一直怏怏不悦,最近又有人来报,敌军在某山区埋了很多地雷,为了保证不误伤,德军将地雷按二维坐标排列。
如果按照每个已知地雷位置为原点构造坐标系,那么两个地雷的坐标轴相交的地方就可能出现地雷,现在请你计算最多可能有的地雷数。
举例,如果如下图:
#################
####$############
#################
###########$#####
#################
井号表示未知区域,dollar号表示已知地雷,如果如上图已知两个雷,那么:
#################
####$######*#####
#################
####*######$#####
#################
输出可能存在雷区如上图*
现在你需要根据以上规律找出所有可能存在雷区,将其标识为*,再输出
输入输出格式 Input/output
输入格式:
输入两个数x,y,表示矩阵长(横)与宽(纵),第二行一个矩阵,包含#与$
输出格式:
输出一个矩阵,表示已知和可能存在雷区,输完矩阵后,再输出一个数,表示最多存在地雷
输入输出样例 Sample input/output
样例测试点#1
输入样例:
20 6
####################
####$###############
####################
###########$########
####################
##############$#####
输出样例:
####################
####$######*##*#####
####################
####*######$##*#####
####################
####*######*##$#####
9
思路:这题呢,十分简单,果然是水题啊。。。
从样例中不难分析出,每个‘*‘的坐标是每个‘$‘除了它本身之外的纵坐标与其他‘$‘的横坐标。
比如样例中给出的三个‘$‘的坐标为:①(5,5)②(12,3)③(15,1)
其他六个‘*‘的坐标为:①(5,1)②(5,3)③(12,1)④(12,5)⑤(15,3)⑥(15,5)
不难发现,‘*‘坐标是‘$‘的纵坐标与其他$‘的横坐标
那么这题就好办了,上代码!
代码如下:
1 #include <stdio.h> 2 int main() 3 { 4 char a[300][300]; 5 int b[300][2],ans=0;//存储坐标 6 int n,m,i,j,k=0; 7 scanf("%d%d",&n,&m); 8 getchar(); 9 for(i=0;i<m;i++)//输入地图 10 { 11 gets(a[i]); 12 } 13 for(i=0;i<m;i++) 14 { 15 for(j=0;j<n;j++) 16 { 17 if(a[i][j]==‘$‘)//存储已知地雷坐标 18 { 19 b[k][0]=i;//纵坐标 20 b[k][1]=j;//横坐标 21 k++; 22 } 23 } 24 } 25 for(i=0;i<k;i++) 26 { 27 for(j=0;j<k;j++) 28 { 29 if(i!=j) 30 { 31 a[b[i][0]][b[j][1]]=‘*‘;//标记为地雷 32 ans++;//地雷数++ 33 } 34 } 35 } 36 for(i=0;i<m;i++) 37 { 38 printf("%s\n",a[i]); 39 } 40 printf("%d\n",ans+k);//先前的地雷加上统计的地雷 41 return 0; 42 }