| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 959 人关注过本帖
标题:编程不会,求助
只看楼主 加入收藏
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
收藏
得分:0 
/*输出1,2,3,4,5全排列且3和4不相邻的所有数*/
#include <stdio.h>
main()
{
int i,j,k,m,n,p,q,counter=0;
int num[5]={0};
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
for(k=1;k<=5;k++)
for(m=1;m<=5;m++)
for(n=1;n<=5;n++)
{
num[0]=i;
if(j!=i)
{
num[1]=j;
if(k!=i&&k!=j)
{
num[2]=k;
if(m!=i&&m!=j&&m!=k)
{
num[3]=m;
if(n!=i&&n!=j&&n!=k&&n!=m) /*输出所有全排列的数 */
{
num[4]=n;
if(num[0]==3&&num[1]!=4) /*筛选1 */
{
for(q=0;q<5;q++)
printf("%d",num[q]);
printf("\n");
counter++;
}

for(p=1;p<4;p++)
{
if(num[p]==3&&num[p+1]!=4&&num[p-1]!=4)/*筛选2*/
{
for(q=0;q<5;q++)
printf("%d",num[q]);
printf("\n");
counter++;
}
}

if(num[4]==3&&num[3]!=4)/*筛选3*/
{
for(q=0;q<5;q++)
printf("%d",num[q]);
printf("\n");
counter++;
}

}
}
}
}
}
printf("There are %d numbers!\n",counter);
}

从理论上算,共有 5!-2!*4!=72 个数满足题意,与程序输出结果相一致.

2006-08-30 11:45
魔幻星空
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2006-8-24
收藏
得分:0 

楼上的算法复杂度太高了,光一个全排列的复杂度就是5的6次方
这个数字太大了吧……
有没有算法复杂度低点的?


2006-08-30 16:17
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
得分:0 
可以考虑用递归

此号自封于2006年11月30日
2006-08-30 16:46
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*看看我的是否可以*/

#include<stdio.h>
int cont=1 ;
void test(int str[],int n)
{
int i,j,k,l,m,a=0,b[5];
for(i=0;i<n;i++)
{
m=0 ;
for(j=i;j<n;j++)
if(str[i]>str[j])b[m++]=str[j];
}
i=0 ;
while(i<n&&str[i]!=3)
{
i++;
}
if((i>0&&str[i-1]==4)||(i<n-1&&str[i+1]==4))
{
a=1 ;
}
if(a==0)
{
printf(" 第%2d种情况:",cont++);
for(i=0;i<n;i++)
printf("%d",str[i]);
printf("\n");
}
}
void perm(int str[],int k,int n)
{
int i,temp ;
if(k==n-1)
{
test(str,n);
}

else
{
for(i=k;i<n;i++)
{
temp=str[k];
str[k]=str[i];
str[i]=temp ;
perm(str,k+1,n);
temp=str[i];
str[i]=str[k];
str[k]=temp ;
}
}
}
int main()
{
int str[5],n,i ;
for(i=0;i<5;i++)str[i]=i+1 ;
printf("各种情况:\n");
perm(str,0,5);
printf("\n");
return(0);
}


倚天照海花无数,流水高山心自知。
2006-09-03 11:34
ajey2004
Rank: 1
等 级:新手上路
帖 子:164
专家分:0
注 册:2004-12-30
收藏
得分:0 

14楼的思路很好,不错不错


2006-09-03 20:00
myem007
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-6
收藏
得分:0 
11楼那个效率太低了
2006-09-06 17:43
魔幻星空
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2006-8-24
收藏
得分:0 
14楼可以把注释加上吗?
看着有些费劲……

2006-09-12 16:42
快速回复:编程不会,求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015438 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved