排列2

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 5437    Accepted Submission(s): 2072

Problem Description
Ray又对数字的列产生了兴趣:

现有四张卡片,用这四张卡片能排列出非常多不同的4位数,要求按从小到大的顺序输出这些4位数。
 
Input
每组数据占一行,代表四张卡片上的数字(0<=数字<=9),假设四张卡片都是0,则输入结束。

 
Output
对每组卡片按从小到大的顺序输出全部能由这四张卡片组成的4位数,千位数字同样的在同一行,同一行中每一个四位数间用空格分隔。

每组输出数据间空一行。最后一组数据后面没有空行。
 
Sample Input
1 2 3 4
1 1 2 3
0 1 2 3
0 0 0 0
 
Sample Output
1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321 1123 1132 1213 1231 1312 1321
2113 2131 2311
3112 3121 3211 1023 1032 1203 1230 1302 1320
2013 2031 2103 2130 2301 2310
3012 3021 3102 3120 3201 3210
 
Source

field=problem&key=2007%CA%A1%C8%FC%BC%AF%D1%B5%B6%D3%C1%B7%CF%B0%C8%FC%A3%A82%A3%A9&source=1&searchmode=source" style="color:rgb(26,92,200); text-decoration:none">2007省赛集训队练习赛(2)

还有比这道题格式更牛的吗?我都吐血了。

。。

PE了7 8 次。。最后试一试的态度 居然AC了。。

放一张输出的图片吧

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

感觉看了输出就懂的了这道题的格式。

全排+优先队列:

#include <stdio.h>
#include <queue>
#include <algorithm>
using namespace std;
int main()
{
int a[4];
priority_queue<int,vector<int>,greater<int> >s;//优先队列。greater换成less就是先出大的
for(int i=0;i<4;i++)
scanf("%d",&a[i]);
while(1)
{
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[0]==0)
break;
do
{
int sum=0;
for(int i=3;i>=0;i--)
sum=sum*10+a[i];
if(sum>1000)
s.push(sum);
}while(next_permutation(a,a+4));//全排公式
for(int i=1;i<=9;i++)
{
if(s.top()/1000==i)
{
printf("%d",s.top()),s.pop();
while(s.top()/1000==i&&!s.empty())
{
printf(" %d",s.top());
s.pop();
}
printf("\n");
}
}
for(int i=0;i<4;i++)//
scanf("%d",&a[i]);//
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[0]==0)//
break;//
else//
printf("\n");//这么多 我不过为了格式。 。这道题 多么恶心。。
}
return 0;
}

四个for循环做的:

#include<stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int a[4],q,stamp[30];
scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
while(1)
{
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[1]==0)
break;
memset(stamp,0,sizeof(stamp));
q=0;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
for(int t=0;t<4;t++)
{
if(i!=j&&i!=k&&i!=t&&j!=k&&j!=t&&k!=t&&a[i]>0)
stamp[q++]=a[i]*1000+a[j]*100+a[k]*10+a[t];
}
sort(stamp,stamp+q);
for(int i=1;i<=9;i++)
{
for(int j=0;j<q;j++)
{
if(stamp[j]!=stamp[j+1]&&stamp[j]/1000==i)
{
printf("%d",stamp[j]),j++;
while(stamp[j]/1000==i)
{
while(stamp[j]==stamp[j+1])
j++;
printf(" %d",stamp[j]);
j++;
}
printf("\n");
}
}
}
scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[1]==0)
break;
else
printf("\n");
}
return 0;
}

还有个搜索能够做。请小伙伴们自己做吧~

hdu1716排列2(stl:next_permutation+优先队列)的更多相关文章

  1. POJ 1833 排列【STL/next_permutation】

    题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 ...

  2. 打印全排列和stl::next_permutation

    打印全排列是个有点挑战的编程问题.STL提供了stl::next_permutation完美的攻克了这个问题. 可是,假设不看stl::next_permutation,尝试自己解决,怎么做? 非常自 ...

  3. STL之优先队列

    STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素 ...

  4. suseoj 1208: 排列问题 (STL, next_permutation(A.begin(), A.end()))

    1208: 排列问题 时间限制: 1 Sec  内存限制: 128 MB提交: 2  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 全排列的生成就是对于给定的字符集或 ...

  5. C++ STL next_permutation(快速排列组合)

    排列组合必备!! https://blog.csdn.net/bengshakalakaka/article/details/78515480

  6. STL next_permutation 算法原理和自行实现

    目标 STL中的next_permutation 函数和 prev_permutation 两个函数提供了对于一个特定排列P,求出其后一个排列P+1和前一个排列P-1的功能. 这里我们以next_pe ...

  7. STL next_permutation 算法原理和实现

    转载自:https://www.cnblogs.com/luruiyuan/p/5914909.html 目标 STL中的next_permutation 函数和 prev_permutation 两 ...

  8. 【STL】优先队列priority_queue详解+OpenJudge-4980拯救行动

    一.关于优先队列 队列(queue)这种东西广大OIer应该都不陌生,或者说,队列都不会你还学个卵啊(╯‵□′)╯︵┻━┻咳咳,通俗讲,队列是一种只允许从前端(队头)删除元素.从后端(队尾)插入元素的 ...

  9. STL next_permutation和prev_permutation函数

    利用next_permutation实现全排列升序输出,从尾到头找到第一个可以交换的位置, 直接求到第一个不按升序排列的序列. #include <iostream> #include & ...

随机推荐

  1. ioctl函数详细说明(网络)

    ioctl 函数 本函数影响由fd 参数引用的一个打开的文件. #include<unistd.h> int ioctl( int fd, int request, .../* void ...

  2. [mysql5.6]主从更换ip之后重新建立同步【转】

    情况时这样的: 主从系统 centos6.5 mysql5.6 由于机房迁移ip地址变了,导致原来的主动无法同步,于是需要重新建立主从关系. 主 192.168.1.23 从 192.168.1.22 ...

  3. IE WebBrowser内核设置

    public class IEVersion { /// <summary> /// IE WebBrowser内核设置 /// </summary> public stati ...

  4. java iterator

    list l = new ArrayList(); l.add("aa"); l.add("bb"); l.add("cc"); for ( ...

  5. 转:Vue-cli proxyTable 解决开发环境的跨域问题

    转:http://www.jianshu.com/p/95b2caf7e0da 和后端联调时总是会面对恼人的跨域问题,最近基于Vue开发项目时也遇到了这个问题,两边各自想了一堆办法,查了一堆资料,加了 ...

  6. ssh登录,Host key verification failed的几种处理方法

    - 修订历史History:  2011.05.22   初稿 - 系统: Ubuntu 10.04LTS  - 软件: SSH 使用SSH登录某台机器,有时因为server端的一些变动,会出现以下信 ...

  7. Luogu P1549 棋盘问题(2)

    题意 在N×N的棋盘上(1≤N≤10),填入1,2,-,N^2,共N^2个数,使得任意两个相邻的数之和为素数. 思路 先线性筛(非标准版),然后用a数组记录以i为下标的数是不是质数(就是标记数组),然 ...

  8. 【PAT】1051 Pop Sequence (25)(25 分)

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  9. lrzsz安装

    当服务器没有安装FTP等工具上传文件时,可以通过rz上传文件,sz    文件名  进行下载文件,默认下载路径为: C:\Users\用户\Downloads,安装如下: yum install lr ...

  10. Angular 2.0--1

    Angular 2.0 从0到1 (五) 第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Ang ...