| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 747 人关注过本帖
标题:晕死,排列,真不知道哪里错了啊!
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

#include<stdio.h>
#define N 5
int cont=1 ;
void test(int str[],int n)
{
int i,j,m,b[N];
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 ;
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[N],i ;

for(i=0;i<N;i++)str[i]=i+1 ;
printf("各种情况:\n");
perm(str,0,N);
printf("\n");
return(0);
}


倚天照海花无数,流水高山心自知。
2006-09-11 08:20
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 
请版主讲讲这个程序好吗? 我始终不明白它为什么循环那么多次,谢谢了
(呵呵,虽然这个程序运行后不是所要的结果)


以下是引用nuciewth在2006-9-11 8:20:28的发言:

#include<stdio.h>
#define N 5
int cont=1 ;
void test(int str[],int n)
{
int i,j,m,b[N];
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 ;
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[N],i ;

for(i=0;i<N;i++)str[i]=i+1 ;
printf("各种情况:\n");
perm(str,0,N);
printf("\n");
return(0);
}




只剩一年了………… 够了!
2006-09-12 15:08
快速回复:晕死,排列,真不知道哪里错了啊!
数据加载中...
 
   



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

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