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一下,以保持升序。

时间: 2025-01-02 13:22:16

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

HDU ACM 4465 Candy-&gt;概率-数学期望-排列组合

题意:有两个箱子,里面各放有糖n个,每天从两个之中任取一颗糖,突然有一天小孩取糖时发现一个盒子里空了,问另一个盒子里面现在有多少糖(求期望值)? #include<iostream> #include<cmath> using namespace std; double F[400008]; double C_N_M(int n,int m) { return F[n]-F[m]-F[n-m]; } void Init() { int i; F[0]=0; for(i=1;i<

HDU ACM 2554 N对数的排列问题

题意:有n对数,大小分别为1.2.3.....n.问是否存在这个样的排列,两个1之间有1个数,两个2之间有2个数,两个3之间有3个数,......,两个n之间有n个数, 另外数的次序可以随意. 解法: 1.设k(k=1,2,..,n)放置的第一个位置为ak,第二个位置为bk.则有bk-ak=k+1(ak<bk),则有sum(bk-ak)=2+3+4+...+(n+1)=(1+2+3+...+n)+(1+1+...+1)=n*(n+3)/2. 2.又由于要有2*n个位置来放置这2*n个数.所以su

杭电 HDU ACM 圆桌会议

圆桌会议 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3356    Accepted Submission(s): 2351 Problem Description HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一般没有

hdu acm 2082 找单词

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3722    Accepted Submission(s): 2663 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到

hdu 2200 Eddy&#39;s AC难题 (排列组合 就是求(a+b)的n次方的展开式)

Eddy's AC难题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3770    Accepted Submission(s): 1765 Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的

HDU ACM 2200 Eddy&#39;s AC难题

解析: 1.可以从中任选m个人(n=>m>=2),有Cn(m)中选择; 2.再把这m个人分2组(每个人都要分组),要使满足最小ac数大于最大ac数,只需要在m个人中插板即可: 例如: m个人假如分别为 : 1,2,3,4,......m-1,m (m个人的ac数从小到大排列) 只需在任意位置插板就可分为符合要求的2组: 1,2,3......t, || t+1...m-1,m (1<=t<m) 则 1,2,3......t 为一组 t+1,t+2,......m-1,m 为一组 3

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的任务