又是全排列问题(hdu 1716)
2014-08-12 23:27
429 查看
又是一全排列问题:和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; }
相关文章推荐
- HDU 1716 排列2 (格式问题+排列)
- HDU 1716 - 排列2
- HDU 1716 排列2
- (step7.2.3)hdu 2554(N对数的排列问题——简单数论)
- HDU 1716 排列2 输出所有的排列数
- hdu-1716 排列2(STL函数库运用)
- HDU 1716(排列2)解题纠错
- HDU--杭电--1716--排列2--深度优先搜索
- HDU-1716 排列2 (DFS)
- hdu2554N对数的排列问题
- hdu 2554 N对数的排列问题
- hdu 4248排列问题
- HDU 1716 排列2
- HDU 1716/排列2
- hdu 1716 排列2 dfs 组合
- HDU 1716 排列2
- hdu 1716 排列2 输出几个数字的全排列
- HDU 1716 排列2
- hdu 1716(排列2)
- HDU 1716 排列2(简单的排列)