hdu acm-step 1.3.7 排列2

  本题题意:给4个数,求所有的4位数组合,按升序打印.

  代码如下:

#include <cstdio>
#include <algorithm>
using namespace std;
int a[4];
bool input()
{
        for(int i=0;i<4;i++)scanf("%d",&a[i]);
        return a[0]||a[1]||a[2]||a[3];
}
//int a[256][4];
int main()
{
        int f1 = 0;
        while(input())
        {
                        if(f1)printf("\n");
                        f1 = 1;
                        int i=0;
                        int temp[4];
                        sort(a,a+4);
                        for(int i=0;i<4;i++)temp[i]=a[i];

                        int last = a[0];
                        int f = 0;
                        do
                        {
                                if(a[0]!=0)
                                {
                                if(a[0]!=last&&last!=0)printf("\n");
                                if(a[0]==last&&f){printf(" ");}
                                f=1;
                                for(int i=0;i<4;i++)
                                        printf("%d",a[i]);
                                last = a[0];
                                }
                        }while(next_permutation(a,a+4));
                        printf("\n");
        }
        return 0;
}

本题用next_permutation可以十分简单的解决,唯一要考虑的就是判断下第一位不能是0,还有控制格式,注意使用前先sort一下,以保持升序。

时间: 08-18

hdu acm-step 1.3.7 排列2的相关文章

HDU ACM 1103 Flo&#39;s Restaurant

分析:借助STL的min_element实现.每次更新最先被占用的桌子,具体见注释. #include<iostream> #include<algorithm> using namespace std; int main() { int A,B,C; char s[10]; int a[102],b[102],c[102]; int curtime,count,ans; int *p; //桌子最先空闲时间 while(cin>>A>>B>>C

hdu acm 1425 sort(哈希表思想)

sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25803    Accepted Submission(s): 7764 Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且

HDU ACM 1005 Number Sequence

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 119732    Accepted Submission(s): 29072 Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A

hdu acm 1166 敌兵布阵 (线段树)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 37903    Accepted Submission(s): 15985 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

HDU 4043 FXTZ II (组合数学-排列组合)

FXTZ II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 498    Accepted Submission(s): 266 Problem Description Cirno is playing a fighting game called "FXTZ" with Sanae. Sanae is a ChuShou

HDU ACM 1044 Collect More Jewels BFS+DFS

题意:在一个迷宫中,有一些宝物,从起点走到终点,问在给定的时间内,到达终点后所能拾取珠宝的最大价值. 分析(BFS+DFS): 1.求入口到第一个取宝物的地方的最短距离 2.求第i个取宝物的地方到第i+1个取宝物的地方的最短距离 3.求第n个取宝物的地方到出口的最短距离 4.保证以上3点能在时间L内实现的情况下,取得的宝石价值最大. BFS特点:对于解决最短或最少问题特别有效,而且寻找深度小,但缺点是内存耗费量大(需要开大量的数组单元来存储状态) DFS特点:对于解决遍历和求所有问题有效,对于问

HDU ACM 2234 无题I-&gt;IDA*算法

分析:IDA*解决,借鉴大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者把每一列上的数字转化成相同的,二者取最小值. 例如: 1 1 3 2 2 4 4 2 3 3 1 4 1 2 3 4 把这个矩阵转化成行合法矩阵需要的操作:第一行至少要2次,第二行也是2次, 第三行是2次,第四行是3次, 所以把矩阵转化成行相同至少要3次. #include<iostream> using namespace std; int map[5][5]; int deep; #define ma

HDU ACM 1272 小希的迷宫

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 31911    Accepted Submission(s): 9850 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是

杭电 HDU ACM Bone Collector (dp 01)

Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 40414    Accepted Submission(s): 16794 Problem Description Many years ago , in Teddy's hometown there was a man who was called "Bo

HDU ACM 1035 Robot Motion 简单模拟题

分析:一步步的走,走出矩阵则说明没有环,若走到已经走过的地方,说明有环,按格式输出结果,OK. #include<iostream> using namespace std; #define N 15 int dir[4][2]={-1,0,1,0,0,-1,0,1}; char map[N][N]; int vis[N][N]; char ch[]="NSWE"; int n,m; int id(char c) { int i; for(i=0;i<4;i++) i