这是我在中国大学的上做的一道题,虽然有点简单,但是开始还真的有点难到我,有点有趣,写篇博客简单记录一下。
题目描述:
题目内容:
将0到9这十个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3。问应当怎样分,编写程序实现。
输入格式:?无
输出格式:"%d,%d,%d\n" (注意:输出的顺序为第一个3位数,第二个3位数,第三个3位数)
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
奉上代码(讲解都在代码注释里,我感觉还挺详细的):
#include <stdio.h>
#include <math.h>
#include <string.h>
int a[10]={0};
//answer()为检验三个数中每个数字的个数
int answer(int i){
a[i%10]++;//数 i 的个位
a[(i/10)%10]++;//十位
a[i/100]++;//百位
//判断,若三个数中任意一个数字超过了一位数则返回 0 ,否则为 1
if(a[i%10]>1||a[(i/10)%10]>1||a[i/100]>1) return 0;
return 1;
}
int main()
{
int i,j;
/*
要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3
对于i从102开始的原因:因为每一个数为三位数,所以i至少为100,
避免数字的重复,所以为102
i到329结束的原因:同样第三个也为三位数所以它最多为999,
所以第一个数最大为333,同样避免数字的重复,i到329截止*/
for(i=102;i<329;i++){
if(answer(i)&&answer(i*2)&&answer(i*3)){
printf("%d,%d,%d\n",i,i*2,i*3);
}
for(j=0;j<10;j++) a[j]=0;
//这一步让 0 - 9 a[i]所有数都归零的目的是方便记录下次函数每位数的个数
}
return 0;
}
运行结果:
?
|