zoukankan      html  css  js  c++  java
  • P1706全排列问题及next_permutation函数

     next_permutation是C++ STL中的<algorithm>库里的一个函数。它的功能是计算一个数组的给定的第一个数到最后一个数按照字典序所得的下一个排列。如果这个排列存在,那么就return这个排列,否则就return一个bool值false。(相当于prev_permutation的逆运算

    这个题可以直接应用上面函数解决。首先,我们先定义好头文件(不要忘记algorithm),定义好数组并进行读入,就像这样:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,i;
    int num[10];
    int main(){
        cin>>n;
        return 0;
    }

    接下来我们要进行初始化。因为题目要求正序输出,所以我们要先初始化成正序,同时,为了后面调用函数方便,要进行输出,就像这样:

    for(i=1;i<=n;i++){
            num[i]=i;//初始化
            cout<<"    "<<num[i];
        }
        cout<<endl;

    然后我们要开一个循环,不断地调用这个函数,直到该函数return false为止。若未return false,则需进行输出。

    while(1){
            if(next_permutation(num+1,num+n+1)==false){//不能再排列 
                return 0;
            }else{
                for(i=1;i<=n;i++){
                    cout<<"    "<<num[i];
                }
                cout<<endl;
            }
        }

    最后是完整代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,i;
    int num[10];
    int main(){
        cin>>n;
        for(i=1;i<=n;i++){
            num[i]=i;//初始化
            cout<<"    "<<num[i];
        }
        cout<<endl;
        while(1){
            if(next_permutation(num+1,num+n+1)==false){//不能再排列 
                return 0;
            }else{
                for(i=1;i<=n;i++){
                    cout<<"    "<<num[i];
                }
                cout<<endl;
            }
        }
        return 0;
    }

    这样就可以AC了!

    最后说一句,STL大法好!

  • 相关阅读:
    ssh免密登录
    idea搭建flink环境
    idea快捷键列表
    scala对复杂json的处理
    配置三台服务器的时间同步-linux 及 ntp.conf配置文件详解
    91. Reverse Linked List 反转链表
    92. Reverse Linked List II 反转链表 II
    121. Best Time to Buy and Sell Stock 买卖股票的最佳时机
    53. Maximum Subarray最大子序和
    70. Climbing Stairs爬楼梯
  • 原文地址:https://www.cnblogs.com/qianr/p/13203902.html
Copyright © 2011-2022 走看看