Vijos p1772 巧妙填数

描述
将1,2,⋯,9共99个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例。
试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。

格式
输入格式
无输入。

输出格式
需要输出全部结果。每行输出3个数 用空格隔开。按照字典序的顺序输出。

来源
NOIP 1998 普及组 第一题

 

 

思路:

 

代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int isSuitable(int);
 6 int getFirst(int);
 7 int getMid(int);
 8 int getEnd(int);
 9 
10 int main() {
11     int i;
12     for (i=100;i<334;i++) {
13         if (isSuitable(i)) {
14             printf ("%d %d %d\n",i,i*2,i*3);    
15         }    
16     }
17     system("pause");
18     return 0;
19 }
20 
21 int isSuitable(int a) {
22     int b,c,i;
23     int t[10];
24     memset (t,0,sizeof(t));
25     b=a*2;
26     if (b>999) return 0;
27     c=a*3;
28     if (c>999) return 0;
29     t[getFirst(a)]++;
30     t[getMid(a)]++;
31     t[getEnd(a)]++;
32     t[getFirst(b)]++;
33     t[getMid(b)]++;
34     t[getEnd(b)]++;
35     t[getFirst(c)]++;
36     t[getMid(c)]++;
37     t[getEnd(c)]++;
38     for (i=1;i<10;i++) {
39         if (t[i]==0) return 0;    
40     }    
41     return 1;
42 }
43 
44 int getFirst(int x) {
45     return x / 100;    
46 }
47 
48 int getMid(int x) {
49     x -= 100*getFirst(x);
50     return x / 10;    
51 }
52 
53 int getEnd(int x) {
54     return x - 100*getFirst(x) - 10*getMid(x);
55 }

 

posted @ 2018-02-26 22:12  yachen2018  阅读(114)  评论(0编辑  收藏  举报