描述
将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 }