如果你也对第一篇题解有疑问……

P2327 [SCOI2005] 扫雷

```cpp #include<bits/stdc++.h> #include<windows.h> using namespace std; int n,a[105],b[105],x; char c[105]; void upd() { system("cls"); for(int i=1;i<=n;i++) cout<<i<<":\t"<<c[i]<<" "<<b[i]<<endl; } void end() { system("cls"); for(int i=1;i<=n;i++) { cout<<i<<":\t"; if(a[i]==0) cout<<"X\t"; else cout<<"BOMB\t"; cout<<b[i]<<endl; } } bool win() { for(int i=1;i<=n;i++) { if(a[i]==0&&c[i]=='P') return 0; if(a[i]==1&&c[i]!='P') return 0; } return 1; } int main() { srand(time(0)); cout<<"选择格子行数:1-100(行)【选择0为随机行数】"<<endl; cin>>n; if(n==0) n=rand()%99+1; cout<<"选择炸弹密度:1-100(%)【选择0为随机密度】"<<endl; cin>>x; if(x==0) x=rand()%99+1; for(int i=1;i<=n;i++) { int r=rand()%99+1; if(r<=x) a[i]=1; c[i]='?'; } for(int i=1;i<=n;i++) { for(int j=i-1;j<=i+1;j++) { if(a[j]==1) b[i]++; } } while(1) { upd(); cout<<"输入1标记,输入2排雷"<<endl; cin>>x; if(x==1) { while(1) { cout<<"输入你要(取消)标记的格子行数(输入0跳过)"<<endl; int y; cin>>y; if(y==0) break; if(c[y]=='?') c[y]='P'; else c[y]='?'; } upd(); } else { while(1) { cout<<"输入你要排雷的格子行数(输入0跳过)"<<endl; int y; cin>>y; if(y==0) break; if(a[y]==1) { cout<<endl<<"GAME OVER"<<endl; Sleep(1000); end(); return 0; } else c[y]='X'; } upd(); } if(win()==1) { cout<<endl<<"YOU WIN"<<endl; Sleep(2000); end(); return 0; } } return 0; } ```
by xiaolaoshu @ 2022-07-22 19:16:31


不清楚这类适不适合发,但我觉得对做题有用
by xiaolaoshu @ 2022-07-22 19:17:26


[可疑] 引用 windows.h [可疑] 调用系统函数
by charleshe @ 2022-07-22 19:18:06


就用了清屏和Sleep 中国人不骗中国人
by xiaolaoshu @ 2022-07-22 19:19:57


@[xiaolaoshu](/user/327971) 确实,是清屏 (但感觉应该和题目没关系)
by char_cha_ch @ 2022-07-22 19:24:04


|