排列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. 用python socket模块实现简单的文件下载

    server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost ...

  2. sh-copy-id命令报错:-bash: ssh-copy-id: command not found

    参考网址:http://www.bubuko.com/infodetail-1662159.html yum -y install openssh-clients

  3. Transition学习笔记

    概述 Android 4.4.2 (API level 19)引入Transition框架,之后很多APP上都使用该框架做出很酷炫的效果,如 Google Play Newsstand app 还有g ...

  4. ida自动编译配置

    这个勾选上,就会出现

  5. SOA 设计的 9 大原则

    面向服务的架构 (SOA) 设计要尽可能地简单.在设计一个 SOA 服务的时候要谨记这 9 大设计原则: 1. 标准服务契约 服务要遵循一个服务描述. 2. 松耦合 服务之间的依赖最小化. 3. 服务 ...

  6. Amazon电商数据分析——数据获取

    最近一段时间主要重心在Amazon电商数据分析上,这是一个偏数据分析和可视化的项目.具体来说就是先获取Amazon的商品数据,数据清洗和持久化存储后作为我们自己的数据源.分析模块和可视化模块基于数据进 ...

  7. Spark优化之gc

    对于官方Programming Guides的GC优化一节做了阅读. 在这里记录一下我的理解,可能记录的比较混乱没有条理: 我理解其实GC优化的主要目的就是在你的任务执行中使用更少的内存,进行更少的g ...

  8. 详解VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射

    本文以VirtualBox为例 如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3. ...

  9. 关于伪类“:pseudo-class”和伪元素“::pseudo-element”的常见应用

    伪类用于指定要选择的元素的特殊状态,向其添加特殊的效果,比如: input { width: 515px; height: 50px; padding: 10px 20px; border: 1px ...

  10. Android导入依赖appcompat-v7报错

    Android导入依赖appcompat-v7报错   导入appcompat-v7时报错了 导入的是implementation 'com.android.support:appcompat-v7: ...