Bootstrap

组合三位数(C 语言)

这是我在中国大学的上做的一道题,虽然有点简单,但是开始还真的有点难到我,有点有趣,写篇博客简单记录一下。

题目描述:

   组合三位数(4分)

题目内容:

将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;
}

运行结果:

 

;