竖式问题

有如下的加法算式。其中每个汉字代表一个数字。
(如果存在对齐问题,可参见【图1.png】)


                    年
            大年
                    过大年
                能过大年
            怎能过大年
        我怎能过大年
+  让我怎能过大年
------------------------
   能能能能能能能


请填写“让我怎能过年” 所代表的整数。
所有数字连在一起,中间不要空格。例如:"3125697"。当然,这个不是正确的答案。


注意:只填写一个整数,不要填写任何多余的内容。

答案:1572836


形如上题这中"竖式问题",可看为一种全排列问题,因此可以用next_permutation()方法来解决(比直接用for循环的代码量要少)


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int i;
	int a[10]={0,1,2,3,4,5,6,7,8,9};//初始化数组的元素必须升序
	do 
	{
		if ((a[0]*1000000+a[1]*100000+a[2]*10000+a[3]*1000+a[4]*100+a[5]*10+a[6])+
			(a[1]*100000+a[2]*10000+a[3]*1000+a[4]*100+a[5]*10+a[6])+
			(a[2]*10000+a[3]*1000+a[4]*100+a[5]*10+a[6])+
			(a[3]*1000+a[4]*100+a[5]*10+a[6])+
			(a[4]*100+a[5]*10+a[6])+
			(a[5]*10+a[6])+
			(a[6])==(a[3]*1000000+a[3]*100000+a[3]*10000+a[3]*1000+a[3]*100+a[3]*10+a[3]))
		{
			for (i=0;i<7;i++)//因为题目只要求7个数字,所以只需要取每种排列的前7位数字来用就可以
				cout<<a[i];
			cout<<endl;
			break;
		}
	}while (next_permutation(a,a+10));//对0~9这10个数字进行全排列
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值