有如下的加法算式。其中每个汉字代表一个数字。
(如果存在对齐问题,可参见【图1.png】)
年
大年
过大年
能过大年
怎能过大年
我怎能过大年
+ 让我怎能过大年
------------------------
能能能能能能能
请填写“让我怎能过年” 所代表的整数。
所有数字连在一起,中间不要空格。例如:"3125697"。当然,这个不是正确的答案。
注意:只填写一个整数,不要填写任何多余的内容。
(如果存在对齐问题,可参见【图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;
}