P1008 三连击

题目:

  将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。

 

2018.3.10

  就目前水平来看,能想到的就是枚举了,主要问题:1,分离每个数字; 2,判断重复;

  Q1,第一次写的时候,按照教材上的方法,对比别人的写的,更喜欢后者;

  Q2,  目前找到的方法:

            1,将9个数字放在一个数组里来记录数字出现的频率;

            2,利用9个数字和为45,积为362,880;

  

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int a[10] = {0};//用来记录每个数字出现的次数;        
 5 int main() {
 6 
 7     for(int i = 123; i < 329; i++) {
 8         memset(a, 0, sizeof(a));
 9         a[i / 100] ++;    //百位;
10         
11         a[i /10 % 10] ++;    //十位;
12         a[i % 10] ++;        //个位;
13 
14         int j = i * 2;
15         a[j / 100] ++;    //百位;
16         a[j /10 % 10] ++;    //十位;
17         a[j % 10] ++;        //个位;
18 
19         int k = i * 3;
20         a[k / 100] ++;    //百位;
21         a[k /10 % 10] ++;    //十位;
22         a[k % 10] ++;        //个位;
23 
24         for(int n = 1; n <= 9; n++) {
25             if(a[n] != 1) {
26                 break;
27             }
28             if(n == 9) {        //没有重复;
29                 cout << i << " " << j << " " << k << endl;
30             }
31         }
32     }
33     return 0;
34 }

 

posted @ 2018-03-10 15:47  Charlie_li  阅读(163)  评论(0)    收藏  举报