题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将1,2, 3,⋯,9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。
输入输出格式
输入格式:
木有输入
输出格式:
若干行,每行3个数字。按照每行第1个数字升序排列。
输入输出样例
192 384 576 * * * ... * * * (输出被和谐了)
本人的解题思路是:1到9被分为三个三位数,那么最大的数是987,最小的数是123。三个数要成1:2:3的比例,987/3=329,所以比列为1的那个数最小是123,最大为329(如果大于329的话,例如330*3=990大于最大数987)。for循环就从123到329循环,求出i,2*i,3*i,的个位、十位、百位,统计出现那些数字,出现了两次或两次以上这组数据就不满足题目要求,数字都只出现一次,就可以输出。
可以利用数组来记录数字出现的次数,比如2出现一次a[2]++,再出现一次a[2]++;判断1~9出现的次数只用判断a[1]~a[9]的值是多少就行了。
#include<stdio.h>
int a[10]={0},i=0;
void fun(int n)
{
a[n%10]++;
a[n/10%10]++;
a[n/100]++;
}
void g()
{
int i=0;
for(i=0;i<10;i++)
{
a[i]=0;
}
}
int main()
{
int b=0;
for(int i=123;i<=333;i++)
{
fun(i);
fun(2*i);
fun(3*i);
for(int j=0;j<10;j++)
{
if(a[j]>1||a[0]!=0)
{
b=-1;
}
}
if(b!=-1)
{
printf("%d %d %d\n",i,2*i,3*i);
}
b=0;
g();
}
}