• 【杭电】[1716]排列2


    这里写图片描述
    这里写图片描述

    一个输出排列组合结果的题目
    起初忘了C++里的函数……
    所以硬写的

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int x[10000];
    int main() {
        int a[4];
        bool kaseflag=false;
        while(scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]),a[0]||a[1]||a[2]||a[3]) {
            if(kaseflag)
                printf("
    ");
            sort(a,a+4);
            for(int i=0; i<4; i++) {
                bool flag=false;
                int ti=a[i];
                for(int j=0; j<4; j++) {
                    if(j!=i) {
                        int tj=ti*10+a[j];
                        for(int k=0; k<4; k++) {
                            if(k!=i&&k!=j) {
                                int tk=tj*10+a[k];
                                for(int p=0; p<4; p++) {
                                    if(p!=i&&p!=j&&p!=k) {
                                        int tp=tk*10+a[p];
                                        if(tp<1000)
                                            continue;
                                        if(!x[tp]) {
                                            x[tp]=1;
                                            if(flag)
                                                printf(" %d",tp);
                                            else
                                                printf("%d",tp);
                                            flag=true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if(flag)
                    printf("
    ");
            }
            kaseflag=true;
        }
        return 0;
    }

    然后又写了一个C++
    next_permutation
    的版本

    需要注意的是用这个函数时要保证初始数组已经是从小到大的
    (这一题题目没说 不过测试数据应该都是已经排序过的)

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int main() {
        int a[4];
        bool kaseflag=false;
        while(scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]),a[0]||a[1]||a[2]||a[3]) {
            sort(a,a+4);
        //无意中发现 如果不排序会出BUG  
        //不排序错误数据
        //3 6 8 4
        //3 8 4 6
        //……等等 
            if(kaseflag)
                printf("
    ");
            int t;
            bool flag=true;
            do {
                if(a[0]==0)
                    continue;
                if(flag) {
                    printf("%d%d%d%d",a[0],a[1],a[2],a[3]);
                    flag=false;
                } else if(t==a[0])
                    printf(" %d%d%d%d",a[0],a[1],a[2],a[3]);
                else
                    printf("
    %d%d%d%d",a[0],a[1],a[2],a[3]);
                t=a[0];
            } while(next_permutation(a,a+4));
            printf("
    ");
            kaseflag=true;
        }
        return 0;
    }

    题目地址:【杭电】[1716]排列2

  • 相关阅读:
    ArrayList源码分析_JDK1.8.0_191
    LinkedList源码分析_JDK1.8.0_191
    HashMap源码分析_JDK1.8.0_191
    生产者消费者模型Java实现
    INT整型最小值取负还是本身的问题
    字节跳动面试题
    go sqlx操作数据库问题
    go gin框架调用cmd运行python脚本问题
    Android视频播放不能使用自研播放器
    mac python版本错误问题以及pip版本错误(anacanda)
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569686.html
Copyright © 2020-2023  润新知