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

  • 相关阅读:
    c#设计模式工厂模式
    海量数据,SQL查询优化
    正则判断字符串是否为数字
    NSString的用法
    HTML常用标签及属性图
    ADO的东西还是很多啊!
    MVC3中的tempdata,viewdata,viewbag总结
    sql 查询,删除重复的记录
    MVC3 Razor语法
    Winform TreeView 节点CheckBox选中,取消
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569687.html
Copyright © 2011-2022 走看看