ACM 用1-9组成的三个三位数,每个数字智能用一次,比例为1:2:3,例如192 384 576。
刚刚开始根本就没有想到什么好的办法,因为感觉无从下手。后来就发现最小的那个数最大不能超过333.就想用暴力。
结果还真的可以解决。
#include<bits/stdc++.h>
int num[10];
int main()
{
for(int a=123;a<=333;a++)
{
int ba=a;
memset(num,0,sizeof(num));
int b=a*2;//第二个数
int bb=b;
int c=a*3;//第三个数
int bc=c;
int flag=0;
while(ba>0)//求解每一位,下面都是一样的
{
int cc=ba%10;
ba=ba/10;
if(num[cc]==0&&cc!=0)//标记每一位的位子是否合法
num[cc]++;
else
{
flag=1;
break;
}
}
if(flag==1)
continue;
while(b>0)
{
int cc=b%10;
b=b/10;
if(num[cc]==0&&cc!=0)
num[cc]++;
else
{
flag=1;
break;
}
}
if(flag==1)
continue;
while(c>0)
{
int cc=c%10;
c=c/10;
if(num[cc]==0&&cc!=0)
num[cc]++;
else
{
flag=1;
break;
}
}
if(flag==0)
{
printf("%d %d %d\n",a,bb,bc);
}
}
}