Backward Digit Sums
题意大概是:知道数的个数n和数通过题意的方法
·
题意大概是:知道数的个数n和数通过杨辉三角的方式得到的和sum,求家数的序列,如果有多组输出字典序最小的一组。
通过生成全排列然后比较其和是否为sum
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,sum;
int a[15][15]={{0},{1},{1,1},{1,2,1},{1,3,3,1},{1,4,6,4,1},{1,5,10,10,5,1},{1,6,15,20,15,6,1},{1,7,21,35,35,21,7,1},{1,8,28,56,70,56,28,8,1},{1,9,36,84,126,126,84,36,9,1},{1,10,45,120,210,252,210,120,45,10,1}};//因为n不超过10,可以列举杨辉三角
int num[10]={1,2,3,4,5,6,7,8,9,10};//加数的范围
int main()
{
cin>>n>>sum;
do{
int ans=0;
for(int i=0;i<n;i++)
{
ans+=num[i]*a[n][i];//求当前序列的加数的和ans
}
if(ans==sum)break;//当相等时终止循环,因为是生成全排列,所以最早出现的序列就是字典序最小的序列
}while(next_permutation(num,num+n));//否则一直生成全排列
for(int i=0;i<n-1;i++)
{
cout<<num[i]<<' ';
}
cout<<num[n-1]<<endl;
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)