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

时间: 2024-08-30 12:47:11

Vijos p1772 巧妙填数的相关文章

vijos 1772 巧妙填数

描述 将1,2,\cdots,91,2,?,9共99个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:31:2:3的比例. 试求出所有满足条件的三个三位数.例如:三个三位数192,384,576192,384,576满足以上条件. 格式 输入格式 无输入. 输出格式 需要输出全部结果.每行输出3个数 用空格隔开.按照字典序的顺序输出. 来源 NOIP 1998 普及组 第一题 求解代码 #include <algorithm> #include <cstdio> usi

Vijos 巧妙填数

描述 将1,2,\cdots,91,2,?,9共99个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:31:2:3的比例. 试求出所有满足条件的三个三位数.例如:三个三位数192,384,576192,384,576满足以上条件. 格式 输入格式 无输入. 输出格式 需要输出全部结果.每行输出3个数 用空格隔开.按照字典序的顺序输出. 来源 NOIP 1998 普及组 第一题 1 /* 2 又一个70行模拟 3 先列举所有以1 2 3为百位的数字作为a 4 再找到相应的b c 5 判

梦工厂实验室 蛇形填数 dfs

问题 D: 蛇形填数 时间限制: 3 Sec  内存限制: 64 MB提交: 28  解决: 5[提交][状态][讨论版] 题目描述 在n*n方阵里填入1,2,...,n*n,要求填成蛇形.例如n=4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4 输入 直接输入方阵的维数,即n的值.(n<=100) 输出 输出结果是蛇形方阵. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 一类题型.四个方向dfs,当走不通时,t++改变方向,否则一直往一个方向走.

【基础题】蛇形填数

题目描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入 直接输入方阵的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 先说一下我的思路,我把n=4时的情况列了出来,发现了奇数时,j变化,偶数时,i变化等变化规律,后来我发现需要总结很多变化规律才能算数来,总结出了n=4的,n=5时又不一样了,哎,头疼(小白的思

每日一练第7天:蛇形填数

蛇形填数.在n×n方阵里填入1,2,...,n×n,要求填成蛇形. 例如,n=4时方阵为: 10 11 12  1 9 16 13  2 8 15 14  3 7   6   5  4 解决此题的一个重要原则就是先判断下一个要填的位置是否满足条件,再填数.不是发现了不能填再退回来. 代码如下: 1 #include <stdio.h> 2 #include <string.h> 3 #define MAXN 100 4 int matrix[MAXN][MAXN]; 5 6 int

蓝桥杯 2014本科C++ B组 六角填数 枚举排列

标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 13 5 int num

NYOJ---蛇形填数(方块填数+三角填数)

蛇形填数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入 直接输入方陈的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 来源 算法经典 解析:个人认为是道比较经典的模拟题,很考察基本功,今天又拿来做了一下,方法就是模拟每个方向的坐标变

nyoj 33 蛇形填数

蛇形填数 时间限制:3000 ms  |            内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7  6  5 4 输入 直接输入方陈的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 1 #include <iostream> 2 using namespace s

python版蛇形填数

引 入 蛇形填数,一道经典有趣的算法入门题.这里用python来实现. 代码 vim snake.py #!/usr/bin/env python #-*- coding: utf-8 -*- #矩阵初始化函数 def genMatrix(rows,cols):       #用二维数组来代表矩阵     matrix = [[0 for col in range(cols)] for row in range(rows)]       for i in range(rows):