zoukankan      html  css  js  c++  java
  • poj3187-Backward Digit Sums(枚举全排列)

    一,题意:
    输入n,sum,求1~n的数,如何排列之后,相邻两列相加,直到得出最后的结果等于sum,输出1~n的排列(杨辉三角)
        3 1 2 4 //1~n 全排列中的一个排列

         4 3 6

          7 9

    sum = 16
    二,思路:
    枚举1~n的所有排列,直至有一种排列使得最后结果为sum就结束。next_permutation()全排列函数的运用

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int main() {
     5     int n, sum;
     6     while (cin >> n >> sum) {
     7         int a[11], b[11];
     8         for (int i = 0; i < n; i++) {
     9             a[i] = i + 1;
    10         }
    11         do {
    12             for (int i = 0; i < n; i++) {
    13                 b[i] = a[i];                        //不能改变a[]中的值,用b[]代替a[]
    14             }
    15             int i;
    16             for (i = n; i > 1; i--) {                //第一次n个数相加,第二次n-1个数相加...直到只剩2个数相加
    17                 for (int j = 0; j < i - 1; j++) {
    18                     b[j] = b[j] + b[j + 1];            //后面的每一个数往前一位加,最后都加到a[0]上
    19                 }
    20             }
    21             if (b[0] == sum)break;
    22         } while (next_permutation(a, a + n));
    23         for (int i = 0; i < n ; i++) {
    24             cout << a[i] << " ";
    25         }
    26         cout << endl;
    27     }
    28     return 0;
    29 }
    View Code

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Git 常用命令集合
    PHP CURL
    Helm安装Dashboard
    使用helm 部署Nginx
    Helm v3部署和使用
    K8s
    Linux
    CentOS下 Docker、Docker Compose 的安装教程(附详细步骤)
    Passwordless SSH Login
    秒杀业务的设计
  • 原文地址:https://www.cnblogs.com/My-Sunshine/p/4985455.html
Copyright © 2011-2022 走看看