用C\c++编写一个小程序

用1,2,2,3,4,5这六个数字,写一个函数,输出所有不同的排列,如512234,4122345等。要求,4不能在第三位,3和5不能相连... 用 1,2,2,3,4,5 这六个数字,写一个函数,输出所有不同的排列,如 512234,4122345等。要求,4不能在第三位,3和5不能相连 展开
 我来答
多少电风扇
2011-04-03 · TA获得超过131个赞
知道答主
回答量:53
采纳率:0%
帮助的人:60.7万
展开全部
#include<iostream>
using namespace std;

int main()
{
int b[6]={1,2,2,3,4,5},i,j,k,l,m,n,p,c,d,*a[6];
for(j=0;j<6;j++)
a[j]=&b[j];
for(j=0;j<6;j++)
{
a[0]=&b[j];
for(k=0;k<6;k++)
{
if(k==j)
continue;
a[1]=&b[k];
for(l=0;l<6;l++)
{
if(l==j||l==k)
continue;
a[2]=&b[l];
for(m=0;m<6;m++)
{
if(m==j||m==k||m==l)
continue;
a[3]=&b[m];
for(n=0;n<6;n++)
{
if(n==j||n==k||n==l||n==m)
continue;
a[4]=&b[n];
for(p=0;p<6;p++)
{
if(p==j||p==k||p==l||p==m||p==n)
continue;
a[5]=&b[p];
if(*a[2]==4)
continue;
else
{
for(i=0;i<6;i++)
{
if(*a[i]==3)
c=i;
if(*a[i]==5)
d=i;
}
}
if(abs(c-d)==1)
continue;
else
{
for(i=0;i<6;i++)
cout<<*a[i]<<' ';
cout<<endl;
}
}
}
}
}
}
}
return 0;
}

以上这个程序可以实现你的要求,问题在于一个命令行窗口不能全部显示出来……你可以对程序略加修改,通过两次运行得到全部结果。或者将结果输入文件中也可。至于变量过多的问题,可以用数组都代替,你 自己尝试一下吧!
Copyleft_X
2011-03-31 · TA获得超过199个赞
知道答主
回答量:131
采纳率:0%
帮助的人:193万
展开全部
不知道你有没有学过STL,下面是一个很笨的方法,具体自己实践去吧:
1、把这6个数放进容器vector,
2、对容器进行sort
3、用next_permutation遍历所有组合
4、对每个组合进行判断4不能在第三位,3和5不能相连
具体:4不能在第三位:直接一个v[2]==4;3和5不能相连:建两个容器含有3,5或者5,3这两个序列,之后用search判断。

如果你算法很强的话,可以不用STL : )
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pingfan_deren
2011-03-31 · TA获得超过2430个赞
知道小有建树答主
回答量:1325
采纳率:0%
帮助的人:695万
展开全部
在纸上写出所有的可能,然后输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
never715
2011-03-31 · TA获得超过942个赞
知道小有建树答主
回答量:1010
采纳率:84%
帮助的人:484万
展开全部
这要用到全排列的算法的!有点纠结!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式