码迷,mamicode.com
首页 > 其他好文 > 详细

Vijos p1772 巧妙填数

时间:2018-02-27 01:22:11      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:eof   memset   顺序   代码   table   ==   pre   color   个数   

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

 

Vijos p1772 巧妙填数

标签:eof   memset   顺序   代码   table   ==   pre   color   个数   

原文地址:https://www.cnblogs.com/yachen2018/p/8476313.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!