排列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. MySQL Dual-Master 双向同步

    本文介绍的Mysql Dual-Master 复制实施方法可能不是最完美.最强大的.但是在我的应用环境下能很好的满足各项需求. 本文基于我们仅仅使用两台MySQL服务器的情况下,但是你会发现文章中介绍 ...

  2. Redis常见业务场景应用

    一定时间范围内不可重复发短信问题 Redis实现消息队列 Redis实现Session共享 ...

  3. async异步注解和aspect切面注解等注解的原理

    在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率.今天我们来探讨下spring是如何完成这个功能的. 1.spring 在扫描bean的 ...

  4. FFT(快速傅里叶变换)摘要

    怎么说呢...这次的代码码风有点... 从这篇博客开始,我终于会用LATEX了!撒花 注:以下涉及多项式的n均表示多项式的次数 FFT用途 很简单,多项式相乘. FFT原理 如果暴力乘,复杂度是$O( ...

  5. 小白学习安全测试(三)——扫描工具-Nikto使用

    扫描工具-Nikto #基于WEB的扫描工具,基本都支持两种扫描模式.代理截断模式,主动扫描模式 手动扫描:作为用户操作发现页面存在的问题,但可能会存在遗漏 自动扫描:基于字典,提高速度,但存在误报和 ...

  6. 【转】Java JUnit 单元测试小结

    原文链接:https://segmentfault.com/a/1190000006731125 测试类型 单元测试(Unit test) 单元测试关注单一的类. 它们存在的目的是检查这个类中的代码是 ...

  7. 几个比较实用的CSS

    1.filter:chroma(color:#FFFFFF);    让指定的背景色透明,例: <table cellspacing = "0" cellpadding = ...

  8. Oracle-查询最近更新的前10条数据

    在实际用途中,常常会要求取最近的几条纪录,这就需要先对纪录进行排序后再取rownum <= 一般常见的 SELECT * FROM (SELECT a.* FROM torderdetail a ...

  9. homestead 无法被局域网其他电脑局域网访问解决办法

    修改(该文件就是通过git下载的homestead文件夹中的文件) homestead/scripts/homestead.rb   # Configure A Private Network IP ...

  10. Windows下PHP多线程扩展pthreads的安装

    pthreads扩展安装步骤 1.查看phpinfo() 获取PHP版本号及位数(x86表示32位,x64表示64位).编译器版本.PHP配置文件加载所在位置等.如下图所示: 2.pthreads扩展 ...