poj 3187 Backward Digit Sums【next_permutation】

简介: 点击打开题目 Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4498   Accepted: 2586 Descript...

点击打开题目

Backward Digit Sums
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 4498   Accepted: 2586

Description

FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N <= 10) in a certain order and then sum adjacent numbers to produce a new list with one fewer number. They repeat this until only a single number is left. For example, one instance of the game (when N=4) might go like this: 

    3   1   2   4

      4   3   6

        7   9

         16
Behind FJ's back, the cows have started playing a more difficult game, in which they try to determine the starting sequence from only the final total and the number N. Unfortunately, the game is a bit above FJ's mental arithmetic capabilities. 

Write a program to help FJ play the game and keep up with the cows.

Input

Line 1: Two space-separated integers: N and the final sum.

Output

Line 1: An ordering of the integers 1..N that leads to the given sum. If there are multiple solutions, choose the one that is lexicographically least, i.e., that puts smaller numbers first.

Sample Input

4 16

Sample Output

3 1 2 4

Hint

Explanation of the sample: 

There are other possible sequences, such as 3 2 1 4, but 3 1 2 4 is the lexicographically smallest.

题目翻译:给出数字n和sum,n代表1-n的n个数字,将1-n按照某种序列排出,然后按照图片的运算方式,就出最后的结果,如果运算结果

等于sum,则输出此时的序列!

解题思路:利用STL里面的next_permutation函数,进行排序,然后一一运算,对比结果!

#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int a[10],b[10],i,j,n,s;
    while(scanf("%d%d",&n,&s)==2){
        for(i=0;i<n;i++)
            a[i]=i+1;
        do{
            for(i=0;i<n;i++)
                b[i]=a[i];
            for(i=1;i<n;i++)
                for(j=0;j<n-i;j++)
                    b[j]+=b[j+1];
            if(b[0]==s)
                break;
        }while(next_permutation(a,a+n));
        for(i=0;i<n-1;i++)
            printf("%d ",a[i]);
        printf("%d\n",a[i]);
    }
    return 0;
}


目录
相关文章
LeetCode 279. Perfect Squares
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
50 0
LeetCode 279. Perfect Squares
|
机器学习/深度学习
|
C++
leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
1186 0
POJ-1256 next_permutation函数应用
字典序列: 在字典序中蕴含着一个点,就是大小的问题,谁先出现,谁后出现的问题。譬如a
772 0
LeetCode - 31. Next Permutation
31. Next Permutation Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个数列,求这个数列字典序的下一个排列.
795 0
|
C++
[LeetCode] Perfect Squares
Well, after seeing the similar problems, you may have known how to solve this problem. Yeah, just to construct larger numbers from smaller numbers by adding perfect squares to them.
711 0