首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

排序解决思路

2012-02-27 
排序题目:用1、2、3、3、4、5六个数组成所有的排列,要求4不在百位上,2和两个3不能相邻。请教高手![解决办法]C/C+

排序
题目:用1、2、3、3、4、5六个数组成所有的排列,要求4不在百位上,2和两个3不能相邻。请教高手!

[解决办法]

C/C++ code
#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可以相邻

热点排行