原先在《算法竞赛入门经典》看过这题,当时没想出来选择百度。结果洛谷再次跳出来了。很尴尬,忘了做题方法的我继续百度。重做了一遍,很惭愧
1 #include <stdio.h> 2 #include <string.h> 3 int main(void) 4 { 5 int a, b; 6 int sum=0; 7 int ar[15]; 8 memset(ar, 0, sizeof(ar));//memset将ar数组全部格式化为0 9 for (int n = 111; n <= 333; n++)//在111前不会重复,到333之后第三个数溢出1000 10 { 11 sum = 0;//重置计数器 12 a = n * 2; 13 b = n * 3; 14 ar[n / 100] = ar[n / 10 % 10] = ar[n % 10] = 1;//将出现的数字的位数在数组中记为1 15 ar[a / 100] = ar[a / 10 % 10] = ar[a % 10] = 1; 16 ar[b / 100] = ar[b / 10 % 10] = ar[b % 10] = 1; 17 for (int i = 1; i <= 9; i++) 18 sum += ar[i];//将数组中9个数字加起来 19 if (sum == 9)//若为9,则每个数字都出现过一遍 20 printf("%d %d %d\n", n, a, b); 21 memset(ar, 0, sizeof(ar));//重置数组 22 } 23 return 0; 24 25 }