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大法好!

  • 相关阅读:
    “ODBC驱动程序不支持动态记录集”错误的解决
    Pro *C/C++学习笔记(一)
    探讨全局变量的析构顺序
    指针和数组关系初探
    (转)Visual C++开发工具与调试技巧整理
    对利用Session纪录datagrid模板列中CheckBox的状态的一点改进
    大学老师列传
    重读保尔的意义
    Rich Edit控件的使用
    C++程序员常用工具集
  • 原文地址:https://www.cnblogs.com/qianr/p/13203902.html
Copyright © 2011-2022 走看看