求助

P1008 [NOIP1998 普及组] 三连击

``` #include<iostream> #include<string> using namespace std; bool list[10]; void clear() { for(int m=0;m<10;m++) list[m]=true; } int main() { for(int i = 111;i<=333;i++) { clear(); short a=i,b=i*2,c=i*3; list[a%10]=0; list[b%10]=0; list[c%10]=0; list[a/10%10]=0; list[b/10%10]=0; list[c/10%10]=0; list[a/100]=0; list[b/100]=0; list[c/100]=0; int f=0; for(int j = 1;j<=9;j++) { if(list[j]==true) { clear(); f=1;break; } } if(!f)cout<<i<<" "<<i*2<<" "<<i*3<<endl; } return 0; } ```
by qusia_MC @ 2024-03-14 20:09:34


错误很严重啊…… @[I_am_code](/user/1288262)
by qusia_MC @ 2024-03-14 20:10:07


``` 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 bool list[10]; 5 void clear() 6 { 7 8 for(int m=0;m<10;m++) 9 list[m]=true; 10 } i11nt main() 12{ 13 for(int i = 111;i<=333;i++) 14 { 15 clear(); 16 short a=i,b=i*2,c=i*3; 17 list[a%10]=0; 18 list[b%10]=0; 19 list[c%10]=0; 20 list[a/10%10]=0; 21 list[b/10%10]=0; 22 list[c/10%10]=0; 23 list[a/100]=0; 24 list[b/100]=0; 25 list[c/100]=0; 26 int f=0; 27 for(int j = 1;j<=9;j++) 28 { 29 if(list[j]==true) 30 { 31 clear(); 32 f=1;break; 33 } 34 } 35 if(!f)cout<<i<<" "<<i*2<<" "<<i*3<<endl; 36 } 37 return 0; } ``` 前面的数字是行数,方便看 第一,问题出在第17-25判断,你的我看不懂啊本来你打的前3行就不对,%100取后两位数按照你开的大小直接就RE了 还有不要光/10的,这种的题最好直接取值(我的17-25行你看看) 第二个:27-34的for中的if你打了个continue,而只是在这个小for里再执行一遍,所以无论怎么样都会直接输出“111 222 333”的,判断啥效果没有要象我这样建立一个变量看看找到了没找到了直接退出。在没什么大问题
by qusia_MC @ 2024-03-14 20:16:42


那个‘9’写错位置了不要管他
by qusia_MC @ 2024-03-14 20:17:12


@[I_am_code](/user/1288262) 代码: ``` #include<iostream> using namespace std; int n[9]={0,0,0,0,0,0,0,0,0}; int sum=0; bool notSame(int a,int b,int c){ sum=0; n[0]=a/100;n[1]=a/10%10;n[2]=a%10; n[3]=b/100;n[4]=b/10%10;n[5]=b%10; n[6]=c/100;n[7]=c/10%10;n[8]=c%10; for(int i=0;i<9;i++)for(int j=0;j<9;j++)if(n[i]==n[j]&&i!=j||n[i]==0)return false; return true; } int main() { int a,b,c; for(a=100;a<=333;a++){ b=2*a;c=a*3; if(notSame(a,b,c))cout<<a<<" "<<b<<" "<<c<<" "<<endl; } return 0; } ```
by Charlie509 @ 2024-04-20 15:52:59


|