慎用全局变量
程序员文章站
2024-02-15 21:52:23
...
#全局变量还敢随便乱用吗
自从讲了函数以后,本懒人就特别喜欢用全局变量,并且鼓吹同学无视全局变量的局限多用用,结果——终于,在今天,遇到了巨大的障碍!
de了一晚上bug啊,以后再也不敢用全局变量了。
题目:N皇后
有兴趣的话百度即可找到体面。
因为学校集训队之前讲过,就觉得 害代码都有了,写写就能交了——结果——
出事了。
先把之前出错的代码po上来,自勉,不能再这样沙雕了!
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int t,arr[101],j,i,ans,cur;
int check(int cur,int j){
if(cur==1){
return 1;
}else{
for(i=1;i<cur;i++){
if(j==arr[i]||abs(j-arr[i])==abs(cur-i)){
return 0;
}
}
return 1;
}
}
void dfs(int cur){
if(cur==t+1){
ans++;
}
for(j=1;j<=t;j++){
if(check(cur,j)==1){
arr[cur]=j;
dfs(cur+1);
arr[cur]=0;
}
}
return;
}
int main(){
for(;;){
memset(arr,0,sizeof(arr));
scanf("%d",&t);
if(t==0){
break;
}
dfs(1);
printf("%d\n",ans);
ans=0;
}
}
看起来似乎无比正确
但是
它跑出来是这样的
众所周知它的正确答案应该是92
结果
出错原因竟是——“j”
该死的全局变量!
在第五次循环的时候它就出了问题。。。
后来把j改掉就过了