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