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 }

 

转载于:https://www.cnblogs.com/yachen2018/p/8476313.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值