水题:

将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。


思路:

1.由于规模很小,不到1000,所以采用穷举的思想。

2.尽量优化:因为1-9数字不重复,所以循环从123开始,而最大的数为3×i=987。

3.对于每一个三位数i,设一个num数组,用来记录1-9中9个数字使用与否。

memset函数用法(百度百科)、头文件

void *memset(void *s, int ch, size_t n);

函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法[1] 。
4.对于三位数i,有j=i×2,k=i×3要研究,把i,j,k中的每位数分解开,得出,9个数,在num数组中把出现的数字标记为1。

统计num数组中共有多少个为1的数字,即可知道i,j,l是否都为不重复的数字。

#include 
#include 

int main()
{
	int n,i,j,k,h, sum;
	int num[10];
	for(i=123; i*3<987; i++)
	{
		memset(num,0,10*sizeof(num[0]));
		num[i/100] = 1;
		num[i/10%10] = 1;
		num[i%10] = 1;
		j = i * 2;
		num[j/100] = 1;
		num[j/10%10] = 1;
		num[j%10] = 1;
		k = i * 3;
		num[k/100] = 1;
		num[k/10%10] = 1;
		num[k%10] = 1;
		sum = 0;
		for(h=1; h<10; h++)
		{
			sum += num[h];
		}
		if(sum == 9)
			printf("%d %d %d\n",i,j,k);
	}
	return 0;
}


你可能感兴趣的:(C语言)