题目要求:用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要
求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必
太动脑筋。
优解:
求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必
太动脑筋。
暴力解法:
#include<stdio.h>
int main()
{
int a,b,c,d,e,f,g,h,i;
for(a=1; a<=9; a++)
{
for(b=1; b<=9; b++)
{
for(c=1; c<=9; c++)
{
for(d=1; d<=9; d++)
{
for(e=1; e<=9; e++)
{
for(f=1; f<=9; f++)
{
for(g=1; g<=9; g++)
{
for(h=1; h<=9; h++)
{
for(i=1; i<=9; i++)
{
if((2*(a*100+b*10+c)==1*(d*100+e*10+f))&&(3*(a*100+b*10+c)==1*(g*100+h*10+i))&&(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&(f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i))
{
printf("%d,%d,%d\n",a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);
}
}
}
}
}
}
}
}
}
}
return 0;
}
优解:
#include <stdio.h>
#include <string.h>
int main()
{
int abc, def, ghi;
int a[10], count = 0;
memset(a, 0, sizeof(a));
for(abc = 123; abc <= 333; abc++)
{
def = 2*abc;
ghi = 3*abc;
a[abc/100] = a[abc/10%10] = a[abc%10] = 1;
a[def/100] = a[def/10%10] = a[def%10] = 1;
a[ghi/100] = a[ghi/10%10] = a[ghi%10] = 1;
int i;
for( i = 1; i <= 9; i++)
count += a[i];
if(count == 9) printf("%d,%d,%d\n", abc, def, ghi);
count = 0;
memset(a, 0, sizeof(a));
}
return 0;
}
优解思路:将可能出现的数字座位数组的下标,加和判断是否为9,是则符合条件,不是说明有重复。