#对于这个问题,我有两种解决思路,第一种较为简单,第二种较为复杂
(1)通用思路:根据数组中的数字自由组合成三位数
(2)找出最小数和最大数并以此为循环边界(目的在于缩小循环的范围,提高效率),之后根据不断循环,将不符合要求的数字排除,在某些题中会简便许多
# 若有其他意见或者是不同想法,欢迎交流(如果你觉得不错的话,记得随手点个赞哦~谢谢啦~)
·由1,2,3,4组成的不重复的三位数
(1)通用思路
#include <stdio.h>
int main()
{
int a[4]={1,2,3,4};
int i,j,k,count=0;
for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
{
for (k=0;k<4;k++)
if (i!=j&&i!=k&&k!=j)
printf("%d\n",a[i]*100+a[j]*10+a[k]);
}
}
return 0;
}
(2)排除思路
#include <stdio.h>
int main()
{
int a[3],i,j,k;
for (i=123;i<=432;i++)
{
int word = 1;
a[0]=i%10;a[1]=i/10%10;a[2]=i/100;
for (j=0;j<3;j++)
{
if (a[j]==1||a[j]==2||a[j]==3||a[j]==4)
{
for (k=0;k<3&&j!=k;k++)
{
if (a[k]==a[j])
{
word = 0;
break;
}
}
}
else
{
word = 0;
break;
}
if (word == 0)
break;
}
if (word)
printf("%d\n",i);
}
return 0;
}
·某些题(适用于排除思路)
用1,2,3,.....,9组成三位数abc,def,ghi,每个数字恰好使用一次,要求 abc:def:ghi=1:2:3.按照“abc def ghi”的格式输出所有解,每行一个解。
#include <stdio.h>
int main()
{
int abc,def,ghi;
int i,k,a[9],word =1;
for (abc=123;abc<=329;abc++)
{
def = abc * 2;
ghi = abc * 3;
a[0]=abc%10;a[1]=abc/10%10;a[2]=abc/100;
a[3]=def%10;a[4]=def/10%10;a[5]=def/100;
a[6]=ghi%10;a[7]=ghi/10%10;a[8]=ghi/100;
for (k=0;k<9;k++)
{
word = 1;
for (i=0;i<9&&i!=k;i++)
{
if (a[k]==a[i]||a[i]==0)
{
word = 0;
break;
}
}
if (word == 0)
break;
}
if (word)
printf("%d,%d,%d\n",abc,def,ghi);
}
}