习题2-6:排列

原先在《算法竞赛入门经典》看过这题,当时没想出来选择百度。结果洛谷再次跳出来了。很尴尬,忘了做题方法的我继续百度。重做了一遍,很惭愧

 1 #include 
 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 }

你可能感兴趣的:(习题2-6:排列)