zoukankan      html  css  js  c++  java
  • 【杭电】[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

  • 相关阅读:
    node.js 建立live-server
    Django 反向解析
    Boost智能指针——weak_ptr
    boost::intrusive_ptr原理介绍
    shared_ptr 的使用及注意事项
    小感
    JQ对页面中某个DIV的大小变化进行监听
    使用java Apache poi 根据word模板生成word报表
    字节byte自适应转换为B、KB、MB、GB、TB
    jq实现 元素显示后 点击页面的任何位置除元素本身外 隐藏元素
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569687.html
Copyright © 2011-2022 走看看