算法竞赛入门经典第二版习题2-6 排列

第一次发博文,谢谢大家支持!

     用 1,2,3…,9组成3个三位数abcdefghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。

分析:我们可以先直接用暴搜找出符合条件的数。当然,通过题目要求我们可以缩小一下搜索范围。当我们得知abc值,即可通过比列来算出def(abc*2)和ghi(abc*3).那么,我们通过推算得出abc的大致范围(123~329).又由于组成这些数字的约束条件为0~9不重复,所以我们还要进行相关问题解决。解决数字不重复问题,我是通过先将所有产生的数值存入数组中,再进行排序。排好序后,从数组中第一个数开始,将其与后一数比较是否相等,直到数组结束。若存在相同数,则break;反之,打印出来。


#include <cstdio>
int main ()
{
    int i,j,k,m,n,t,a[9];
    for (i = 123; i <= 329; i++)
    {
        j = i*2;
        k = i*3;
        
        //将生成的数分拆存入数组中 
        a[0] = i/100;a[1] = i/10%10;a[2] = i%10;
	a[3] = j/100;a[4] = j/10%10;a[5] = j%10;
	a[6] = k/100;a[7] = k/10%10;a[8] = k%10;
        
    	for(m = 0;m  < 9;m++)  //排序 
    		for(n = m;n <  9;n++)
    		{
    			if(a[m] > a[n])
    			{
    				t =  a[m];
    				a[m] = a[n];
    				a[n] = t;
				}
			}
    	
    	for(m = 0,n = 1;n < 9;m++,n++)//检查是否有重复数 
    		if(a[m] == a[n]) break;
    

        if (n == 9)
            printf ("%d %d %d\n",i,j,k);
    }
    return 0;
}


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值