又是全排列问题(hdu 1716)
来源:互联网 发布:最后的晚餐 知乎 编辑:程序博客网 时间:2024/05/18 03:34
又是一全排列问题:和hdu1027不同的是:这个要输出全部的序列,而且必须按照题目的格式控制来!
#include <iostream>#include <string.h>#include <algorithm>using namespace std;int flag[24][4];int main(){ int i,j,k,h; int sum; int mad=0; int b[4]; while(1) { sum=0; k=0;/**< k表示排列数的计数作用,方便格式的输出 */ memset(flag,0,sizeof(flag)); for(i=0;i<4;i++) { cin>>b[i]; sum+=b[i]; } if(sum==0)/**< 如果输入的全为0,那么直接终止输入 */ break; if(mad!=0) cout<<endl; mad=1; sort(b,b+4); for(i=0;i<4;i++) { if(b[i]>0) break; } j=i;/**< 记录第一位非0的数字*/ swap(b[0],b[j]); //prit(b); /**< 将产生的其中一个全排列存储起来 */ for(i=0;i<4;i++) flag[k][i]=b[i]; k++;/**< 下一个全排列 */ /**< 产生全排列 */ while(1) { for(i=3;i>=1;i--) if(b[i]>b[i-1]) break; if(i<1) break; for(j=3;j>=i;j--) { if(b[j]>b[i-1]) { swap(b[j],b[i-1]); sort(b+i,b+4); for(h=0;h<4;h++) flag[k][h]=b[h]; k++; break; } } } for(i=0;i<k;i++) { for(j=0;j<4;j++) cout<<flag[i][j]; if(flag[i][0]!=flag[i+1][0]) cout<<endl; else cout<<' '; } } return 0;}
0 0
- 又是全排列问题(hdu 1716)
- hdu 1716 排列2 (全排列)
- HDU 1716 排列2(全排列函数的应用)
- HDU-1716()(全排列+重集排列)
- hdu 1716 全排列算法
- hdu 1027(全排列)
- HDU 1027(全排列)
- 全排列问题(STL)
- HDU 1716 排列2 (STL全排)
- HDU 1027 全排列 (STL_permution)
- HDU 1027 全排列
- HDU 1027 全排列
- HDU-1027-全排列
- HDU-2616 全排列
- hdu 1027全排列
- hdu 2610 全排列
- hdu 1716 排列2 输出几个数字的全排列
- hdu 1716 排列2(全排列+dfs)
- centos 没有heartbeat包
- UML随笔
- one sentence i follow
- 1278 hdu 漂亮面料的设计
- uva--10090
- 又是全排列问题(hdu 1716)
- 如何写一个递归!
- uva10465 - Homer Simpson(完全背包)
- Openstack百科——功能剖析
- 银行业务系统
- pro4js和openlayer版本配置
- 什么是POP3、SMTP和IMAP?
- [小技巧] 查看Linux发行版的版本信息
- go语言json序列化与反序列化