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;
}


目录
相关文章
|
7月前
|
Java
HDU-2199-Can you solve this equation?
HDU-2199-Can you solve this equation?
38 0
|
7月前
|
Java
HDU-2199-Can you solve this equation
HDU-2199-Can you solve this equation
31 0
LeetCode 279. Perfect Squares
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
70 0
LeetCode 279. Perfect Squares
POJ 1306 Combinations
POJ 1306 Combinations
114 0
|
机器学习/深度学习
|
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.
1205 0
|
算法
LeetCode - 37. Sudoku Solver
37. Sudoku Solver  Problem's Link  ---------------------------------------------------------------------------- Mean:  求解数独.
956 0