zoukankan      html  css  js  c++  java
  • hdu 1716 排列2(stl next_permutation)

    http://acm.hdu.edu.cn/showproblem.php?pid=1716

    考到题目直接套 next_permutation 没有注意到0不能为首位 结果wa了一整天

    输出结构也略有些小坑

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int num[10];
    int main()
    {
        int mark=0;
        while(scanf("%d%d%d%d",&num[0],&num[1],&num[2],&num[3])!=EOF)
        {
            if(num[0]==0&&num[1]==0&&num[2]==0&&num[3]==0)  break;
            if(mark==1) printf("
    ");
            if(mark==0) mark++;
            
            sort(num,num+4);
            int first,i;
            while(num[0]==0)
            {
                next_permutation(num,num+4);
            }
            first=num[0];
            int flag=0;
            do
            {
                if(first!=num[0])
                {
                        first=num[0];
                        flag=0;
                        printf("
    ");
                }
                if(first==num[0]&&flag!=0)
                {
                    printf(" ");
                }
                for(int i=0;i<4;i++) printf("%d",num[i]);
                flag++;
            }while(next_permutation(num,num+4));
            printf("
    ");
        }
        return 0;
    }
    View Code

    离线处理

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int num[10000][10];
    int main()
    {
        int coun=0;
    
        while(1)
        {
            scanf("%d%d%d%d",&num[coun][0],&num[coun][1],&num[coun][2],&num[coun][3]);
            if(num[coun][0]==0&&num[coun][1]==0&&num[coun][2]==0&&num[coun][3]==0)
            break;
            coun++;
        }
    
        for(int k=0;k<coun;k++)
        {
            sort(num[k],num[k]+4);
            int first,i;
            while(num[k][0]==0)
            {
                next_permutation(num[k],num[k]+4);
            }
            first=num[k][0];
            int flag=0;
            do
            {
                if(first!=num[k][0])
                {
                        first=num[k][0];
                        flag=0;
                        printf("
    ");
                }
                if(first==num[k][0]&&flag!=0)
                {
                    printf(" ");
                }
                for(int i=0;i<4;i++) printf("%d",num[k][i]);
                flag++;
            }while(next_permutation(num[k],num[k]+4));
            printf("
    ");
            if(k!=coun-1)
                printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【转】随机函数的rand、srand用法
    realloc,malloc,calloc函数的区别
    c语言中time相关函数
    C语言strdup函数
    c语言strtod()函数的用法
    (转)从拜占庭将军问题谈谈为什么pow是目前最好的共识机制
    Linux命令行编辑快捷键
    少走弯路的10条忠告
    centos6下升级git版本的操作记录
    (转)Ctrl+H 浪潮Raid配置文档
  • 原文地址:https://www.cnblogs.com/sola1994/p/4243411.html
Copyright © 2011-2022 走看看