组合三位数(4分)
题目内容:
将1到9这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3。问应当怎样分,编写程序实现。
输入格式:无
输出格式: "%d,%d,%d\n" (注意:输出的顺序为第一个3位数,第二个3位数,第三个3位数)
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串:
时间限制: 500ms 内存限制: 32000kb
从最开始1000000000次循环 一直优化到200次循环
(12月23日更新注释)
# include<stdio.h>
int judge(int n);
int a[10]={0};
int main()
{
int i,j,z,n1,n2,n3,k;
for(i=123;i<333;i++)
{
if(judge(i)&&judge(i*2)&&judge(i*3))
printf("%d,%d,%d\n",i,i*2,i*3);
for(k=0;k<10;k++)
a[k]=0;
}
}
int judge(int n) //这个函数就是用来判断是否有重复的数出现,因为题中说的是1~9,每个数字只能出现一次。
{ // 用 233这个数来举例吧
a[n%10]++; //a[]数组下表表示1~9,a[]数组中的值表示该数出现的次数。这个就是a[3]++,表示个位3出现的次数加一。
a[n/10%10]++; // 这个表示十位的 3,次数再加一。
a[n/100]++; // 这个表示百位 2 , 加一。
if(a[n%10]>=2||a[n/10%10]>=2||a[n/100]>=2) //这个判断,只要是该数出现了 两次及以上,那肯定就不符合了,返回0.
return 0;
return 1;
}