欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

习题2-6:排列

程序员文章站 2023-11-02 14:56:16
原先在《算法竞赛入门经典》看过这题,当时没想出来选择百度。结果洛谷再次跳出来了。很尴尬,忘了做题方法的我继续百度。重做了一遍,很惭愧 1 #include 2 #include 3 int main(void) 4 { 5 int a, b; 6 int s ......

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

 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 }