首先上两段代码
#include<bits/stdc++.h>//WA using namespace std; int main() { int X,Y,n,m,cnt;char s[1005];//若X Y cnt不为全局变量 值不初始化为0 scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) { scanf("%s",s+1); for (int j=1;j<=m;j++) if (s[j]=='B') cnt++,X+=i,Y+=j,printf("cnt=%d X=%d Y=%d\n",cnt,X,Y); } X/=cnt;Y/=cnt; printf("%d %d\n",X,Y); return 0; }/* #include<bits/stdc++.h>//AC using namespace std; int X,Y,n,m,cnt;char s[1005]; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) { scanf("%s",s+1); for (int j=1;j<=m;j++) if (s[j]=='B') cnt++,X+=i,Y+=j; } X/=cnt;Y/=cnt; printf("%d %d\n",X,Y); return 0; }*/
上面的会WA 下面的AC ,找了找 ,发现只是定义变量的时候全局和局部的区别而已
想交试试的话 题目链接 http://codeforces.com/contest/1028/problem/A
#include<bits/stdc++.h> int v[120][120]; int main(){ int t1,t2,t3; int n,m;scanf("%d%d",&n,&m); int cnt = 0;int flag = 1; getchar();//少一个这个读取换行 疯狂WA 噗~~~~ for(int i=1;i <= n ;i++) { for(int j =1 ; j<= m; j++) { v[i][j] = getchar(); if(v[i][j] == 'B') { //printf("sdsdsdsds\n"); if( flag ) {t1= i,t2= j;flag =0;} cnt++; //if( cnt == 1) printf("kai %d %d\n", t1, t2); } }getchar(); }//printf("%d %d %d\n",t1 ,t2 ,cnt ); if( cnt == 1) printf("%d %d\n", t1, t2); else { t3 = int(sqrt(cnt)/2); printf("%d %d\n", t1+t3, t2+t3); } return 0; }
搜了搜博客 发现这个 https://blog.csdn.net/linuxtiger/article/details/26835239
C++中未初始化全局变量会被编译器自动赋值 0
看了下
结论是 没啥特殊的技术原因,是标准的硬性要求。
有个好点的 代码习惯 , 自己初始化就好了