题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1,2,…,9 共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1:2:3 的比例,试求出所有满足条件的 3 个三位数。
输入格式
无
输出格式
若干行,每行 33 个数字。按照每行第 11 个数字升序排列。
首先看到这一题时首先应该观察到这里说是拿1~9九个数字来组成,并且要是1:2:3的比例,很容易就能想到第一个数字的百位数一定是不能超过3的,那我们就可以那这个来开刀:将第一个数字的初始值设为123,且它不能超过329(1000/3),即
for(int a=123;a<=329;a++)
然后再分别定义它的两倍和三倍
int b=2*a;
int c=3*a;
但是这样子走出来的数据的组成数字可能有重复,所以我们需要来一个数组x[10],分别把每个数字的出现次数记录下来,然后再通过代码
int pan=1;
for(int i=1;i<=9;i++){
if(x[i]!=1){
pan=0;
break;
}
}if(pan==0)
continue;
else
printf("%d %d %d\n",a,2*a,3*a);
进行判断和输出。
所以这一题就迎刃而解啦~
代码如下:
#include<stdio.h>
int main(){
int a;
for(a=123;a<=329;a++){
int b=2*a;
int c=3*a;
int t=a;
int x[10]={0};
while(b){
x[b%10]++;
b/=10;
}while(t){
x[t%10]++;
t/=10;
}while(c){
x[c%10]++;
c/=10;
}int pan=1;
for(int i=1;i<=9;i++){
if(x[i]!=1){
pan=0;
break;
}
}if(pan==0)
continue;
else
printf("%d %d %d\n",a,2*a,3*a);
}return 0;
}
(当然,有数学大佬一眼就看出答案的也不是不可以直接输入)