排序
题目:用1、2、3、3、4、5六个数组成所有的排列,要求4不在百位上,2和两个3不能相邻。请教高手!
[解决办法]
#include "stdafx.h"#include <iostream>using namespace std;int a[6]={1,2,3,3,4,5};int b[6]={0,0,0,0,0,0};void figout(int p){ if(p==6) { for(int j=0;j<6;j++) cout<<a[b[j]]; cout<<endl; }else { for(int i=0;i<6;i++) { bool f=false; if(p) if((a[b[p-1]]==2&&a[i]==3)||(a[b[p-1]]==3&&a[i]==2)) continue; if(p==3&&a[i]==4) continue; for(int j=0;j<p;j++) if(b[j]==i) f=true; if(f) continue; b[p]=i; figout(p+1); } }}int _tmain(int argc, _TCHAR* argv[]){ figout(0); return 0;}
[解决办法]
#include <iostream>
using namespace std;
int main()
{
for(int i = 1;i < 6;i++)
for(int j = 1;j < 6;j++)
for(int k = 1;k < 6;k++)
for(int l = 1;l < 6;l++)
for(int m = 1;m < 6;m++)
{
if((i != j)&&(i != k)&&(i != l)&&(i != m)
&&(j != k)&&(j != l)&&(j != m)
&&(k != l)&&(k != m)
&&(l != m))
{
if((i == 2)&&(j == 3)||((j == 2)&&(k == 3))||((k == 2)&&(l == 3))||((l == 2)&&(m == 3))||
((j == 2)&&(i == 3))||((k == 2)&&(j == 3))||((l == 2)&&(k == 3))||((m == 2)&&(l == 3)))
continue;
if(i != 2 && k != 4)
cout << 3 << i << j << k << l << m << endl;
if(i != 2 && k != 4 && j != 2)
cout << i << 3 << j << k << l << m << endl;
if(j != 2 && k != 4 && k != 2)
cout << i << j << 3 << k << l << m << endl;
if(k != 2 && l != 2)
cout << i << j << k << 3 << l << m << endl;
if(l != 2 && l != 4 && m != 2)
cout << i << j << k << l << 3 << m << endl;
if(m != 2&&l != 4)
cout << i << j << k << l << m << 3 << endl;
}
}
return 0;
}
[解决办法]
上面程序理解"2和两个3不能相邻"是2不能和3相邻,两个3可以相邻