1~9分成1:2:3的三个3位数

1~9分成1:2:3的三个3位数。

将1到9 这九个数字分成三个3位数,分求第一个3位数,
正好是第二个3位数的二倍,是第三个3位数的三倍。问应当怎样分法。

算法分析:

首先因为是9个不同的数组成三个三位数,那么初值最小的肯 定是123,最大的就是333,但是这里为了减小区间,可以设置为329, 因为再大些就不符合条件。其次就是我们需要把各个位数分离出来, 看是否存在相等或不在1-9的范围内。最后就是构建整体,由于123-329
之间有大量的数字,而每组9个数据都需要比较,所以创建一个子函数, 不断地调用,较为方便。

#include<stdio.h>
int fun(int a[], int n)
{
	int i, j, k=0;
	for(i = 0; i < n-1; i++)
	for(j = i+1; j < n; j++)
	{
		if(a[i]==a[j]||a[j]==0)//让每两个数都比教一次,如果发现有 
		return 0;			//相同的或某个数值为零则这组数有问题 
	}
	if(i == n-2&&j==n-1)	//当i等于倒数第二个数,j等于最后一个数时 
	{						//说明所有的数都遍历了一遍 
		return 1;
	}
}
main()
{
	int a[9],i,j,temp;
	for(i = 123; i <= 329; i++)
	{
		temp = i;			//设置临时变量将i的值赋给他 
		for(j = 0; j < 9; j++)	//将各个位数分离出来存储在数组之中 
		{
			a[j] = temp%10;
			temp /= 10; 
			if(temp==0&&j==2)
			temp = 2*i;
			if(temp==0&&j==5)
			temp = 3*i;
		}
		if(fun(a,9)!=0)
			printf("%d %d %d\n",i,2*i,3*i);	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值