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 329. Longest Increasing Path in a Matrix
给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
85 0
LeetCode 329. Longest Increasing Path in a Matrix
LeetCode 279. Perfect Squares
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
76 0
LeetCode 279. Perfect Squares
POJ-1256 next_permutation函数应用
字典序列: 在字典序中蕴含着一个点,就是大小的问题,谁先出现,谁后出现的问题。譬如a
796 0
|
算法
LeetCode - 37. Sudoku Solver
37. Sudoku Solver  Problem's Link  ---------------------------------------------------------------------------- Mean:  求解数独.
964 0
LeetCode - 31. Next Permutation
31. Next Permutation Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个数列,求这个数列字典序的下一个排列.
830 0
[LeetCode] Longest Increasing Path in a Matrix
Given an integer matrix, find the length of the longest increasing path. From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or mov
1010 0
Perfect Squares
Perfect Squares Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, .
954 0
|
C++ C语言
[LeetCode] Sudoku Solver
Just don't be scared by this problem :-) It's also very standard backtracking problem. This post shares a very concise code, which is rewritten below in C++.
654 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.
733 0