題目傳送門 簡單分析一下題目,可以發現: 第一個數最小為123 第一個數最大為333,再大第三個數就是四位數了 所以可以這樣做: 然後我們可以將每個數的各個數位分離出來,再加到標記數組裡面: code: 另外,為了防止複製,我悄悄地在代碼中留了個小錯誤,能不能直接提交,就看你的啦! PS:如果發現了 ...
簡單分析一下題目,可以發現:
- 第一個數最小為123
- 第一個數最大為333,再大第三個數就是四位數了
所以可以這樣做:
1 for(int a=100;a<=333;a++){ 2 b=2*a; 3 c=3*a 4 ... 5 }
然後我們可以將每個數的各個數位分離出來,再加到標記數組裡面:
1 while(a!=0){ 2 flag[a%10]=1; 3 a/=10; 4 }
code:
1 #include<bits/stdc++.h> //萬能頭文件 2 using namespace std; 3 bool flag[15]; //標記數組 4 void f(int a){ //void 空類型,不返回值 5 while(a!=0){ //分解各位數字 6 flag[a%10]=1; 7 a/=10; 8 } 9 10 /* 11 我原來的寫法,這個也行,我個人推薦上面那種 12 13 flag[a%10]=1; 14 flag[a%100-a%10]=1; 15 flag[a/100]=1; 16 */ 17 return; 18 } 19 int main(){ 20 int a,b,c; 21 bool x=0; 22 for(a=123;a<=333;a++){//枚舉a 23 x= 0 ; 24 b=a*2; 25 c=a*3; 26 //生成另外兩個數 27 f(a);f(b);f(c);//調用函數 28 29 for(int i=1;i<=9;i++){ 30 if(flag[i]!=1){ 31 x=0; 32 break;//跳出迴圈 33 } 34 } 35 36 if(x) cout<<a<<' '<<b<<' ' <<c<<endl; //輸出 37 memset(flag,0,10);//重置標記數組 10可以更改為sizeof(flag) 38 } 39 return 0; 40 }
另外,為了防止複製,我悄悄地在代碼中留了個小錯誤,能不能直接提交,就看你的啦!