C语言:组成不重复的三位数

#对于这个问题,我有两种解决思路,第一种较为简单,第二种较为复杂

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

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值