permutation

这是暑假集训的题目,感觉很想写出来分享一下,

 

题目是这样的:

用1,2,3~~9组成3个三位数,abc,def,ghi,每个数字使用一次,abc:def:ghi=1:2:3 ,写出三位数所产生的所有解,从小到大排列 按照abc def ghi输出

 

我的思路:

先确定最小的那个三位数的范围,然后进行循环,根据比值来找出另外两个三位数,然后取出这三个三位数的各位数,用每位数对应的数组元素+1,最后把数组循环一遍,如果有大于1的,说明有数字被使用了2次,那么这三个三位数不符合条件,不输出,如果没有一个数组元素大于1,则说明每个数字只使用了一次,输出这三个三位数。

下面是我写的代码:

#include
int main()
{
	int i,x,y,z,a[10]={0},j;
	for(i=123;i<=333;i++)
	{
		x=i;
		y=2*x;
		z=3*x;
			a[x/10%10]++;
			a[y/10%10]++;
			a[z/10%10]++;
			a[x/100%10]++;
			a[y/100%10]++;
			a[z/100%10]++;
			a[x%10]++;
			a[y%10]++;
			a[z%10]++;
		for(j=0;j<10;j++)
		{
			if(a[j]>1)
				break;
			else
				a[j]=0;
		}
		if(j<10)
		{
			for(j=0;j<10;j++)
			{
				a[j]=0;
			}
		}
		else
			printf("%d %d %d\n",x,y,z);
	}
}

第一次写博客,有什么不好的地方希望大家指出。

你可能感兴趣的:(暴力求解)