很疑惑为什么会输出0

P1008 [NOIP1998 普及组] 三连击

我的AC: ```cpp #include<iostream> #include<map> using namespace std; bool is_zero(int n) { int first_num = n % 10; int final_num = n / 100; int second_num = (n / 10) % 10; if (first_num == 0 || second_num == 0) { return true; } if(final_num == second_num || final_num == first_num || second_num == first_num) { return true; } return false; } int main() { for(int i = 123; i <= 329; i++) { int flag = 0; int flag_1 = 0; int flag_2 = 0; map<int, int>num; if(!is_zero(i)) { int first_num = i % 10; int final_num = i / 100; int second_num = (i / 10) % 10; num[first_num] = first_num; num[final_num] = final_num; num[second_num] = second_num ; flag = 1; } if(!is_zero(i * 2)) { int first_num = i * 2 % 10; int final_num = i * 2 / 100; int second_num = (i * 2 / 10) % 10; if(num.count(first_num) == 0 && num.count(final_num) == 0 && num.count(second_num) == 0) { flag_1 = 1; num[first_num] = first_num; num[final_num] = final_num; num[second_num] = second_num ; } } if(!is_zero(i * 3)) { int first_num = i * 3 % 10; int final_num = i * 3 / 100; int second_num = (i * 3 / 10) % 10; if(num.count(first_num) == 0 && num.count(final_num) == 0 && num.count(second_num) == 0) { flag_2 = 1; } } if(flag == 1 && flag_2 == 1 && flag_1 == 1) { cout << i << " " << i * 2 << " " << i * 3 << endl; } } } ```
by Weizhuo_Zhao @ 2023-07-02 21:09:19


两种: ①: ```cpp #include <iostream> using namespace std; int main(){ for(int i=123;i<=333;i++){ int a=i,b=2*i,c=3*i; int _check[10]={0}; int _a=a,_b=b,_c=c; for(int ix=0 ; ix<3 ; ix++,_a/=10,_b/=10,_c/=10){ _check[_a%10]++; _check[_b%10]++; _check[_c%10]++; } bool r=true; for(int m=0;m<10;m++){ if(_check[m]>=2){ r=false; } if(_check[0]>=1){ r=false; }//忽略0 } if(r){ cout<<a<<" "<<b<<" "<<c<<endl; } } return 0; } ``` ②: ```cpp #include <iostream> int main() { for (int i = 123; i <= 333; i++) { int a = i, b = 2 * i, c = 3 * i; int _a = a, _b = b, _c = c;//不能直接a/10,a,b,c会直接被除到0 int _check[10] = { 0 }; for (int j = 0; j < 3; j++) { _check[a % 10] = 1; a /= 10; _check[b % 10] = 1; b /= 10; _check[c % 10] = 1; c /= 10; } bool r = true; for (int m = 1; m <= 9; m++) { if (_check[m] == 0) { r = false; } } if (r) { std::cout << _a << ' ' << _b << ' ' << _c << std::endl; } } //懒得缩进+同化.jpd return 0; } ```
by Mirrol @ 2023-08-21 16:01:35


|