刷题——Backward Digit Sums POJ

来源:互联网 发布:kinect手势识别算法 编辑:程序博客网 时间:2024/06/05 22:32
/*
给定 n,sum
用从1开始到n的n个数,如下图一样,最后一个数为sum
    3   1   2   4


      4   3   6


        7   9


         16
利用全排列函数,筛选出最小的字典序数列
*/
#include <algorithm>
#include <stdio.h>
using namespace std;
int perm2[10];
int main()
{
int sum,n;
while(scanf("%d %d",&n,&sum)!=EOF){
for(int i=0;i<n;i++)
perm2[i]=i+1;
do{
int c[10];
for(int i=0;i<n;i++)
c[i]=perm2[i];
int m=n;
while(m){
for(int i=0;i<m-1;i++)
c[i]=c[i]+c[i+1];
m--;
}
if(c[0]==sum)break;
}while(next_permutation(perm2,perm2+n));
printf("%d",perm2[0]);
for(int i=1;i<n;i++)
printf(" %d",perm2[i]);
printf("\n");
}
return 0;
}
原创粉丝点击