题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 \(1, 2, \ldots , 9\) 共 \(9\) 个数分成 \(3\) 组,分别组成 \(3\) 个三位数,且使这 \(3\) 个三位数构成 \(1 : 2 : 3\) 的比例,试求出所有满足条件的 \(3\) 个三位数。
输入格式
无
输出格式
若干行,每行 \(3\) 个数字。按照每行第 \(1\) 个数字升序排列。
样例 #1
样例输入 #1
无
样例输出 #1
192 384 576
* * *
...
* * *
(剩余部分不予展示)
提示
NOIP1998 普及组 第一题
一道NOIP的远古题目,先给大家演示一种特别屑的做法:
#include<bits/stdc++.h>
using namespace std;
int main() {
cout << "192 384 576\n219 438 657\n273 546 819\n327 654 981";
return 0;
}
然后把它精简一下发现就只有两行……
接下来是不太屑的做法:
#include<bits/stdc++.h>
using namespace std;
int main() {
for(int i = 123; i < 333; ++ i) {//从123枚举到333,因为最大是999,所以就不用枚举了哈
int a[10] = {0}, b[10] = {0}, c[10] = {0};
a[1] = i % 100 % 10;//第一个数的个位
a[2] = i % 100 / 10;//第一个数的十位
a[3] = i / 100;//第一个数的百位
b[1] = 2 * i % 10 % 10;//第二个数的个位
b[2] = 2 * i % 100 / 10;//第二个数的十位
b[3] = 2 * i / 100;//第二个数的百位
c[1] = 3 * i % 10 % 10;//第三个数的个位
c[2] = 3 * i % 100 / 10;//第三个数的十位
c[3] = 3 * i / 100;//第三个数的百位
if(a[1]*a[2]*a[3]*b[1]*b[2]*b[3]*c[1]*c[2]*c[3]==362880&&a[1]+a[2]+a[3]+b[1]+b[2]+b[3]+c[1]+c[2]+c[3]==45) {
cout << i << " " << i * 2 << " " << i * 3 << endl;//依次输出这三个数
}
}
return 0;
}
标签:10,连击,洛谷,三位数,int,题解,样例,个位,100
From: https://www.cnblogs.com/charzie-blog/p/18161240