排列问题!

yijiangmei 2003-09-11 09:24:14
题目:由用户给定一个数N,然后电脑打印从1到N的所有的排列。如N=3,则电脑打印 123 132 213 231 312 321 !N<10
#include<stdio.h>
#include<string.h>
int xunhuan(char * ,int);
int i;
char array[] ={'1','2','3','4','5','6','7','8','9','0'};

void main()
{
char a[10];
scanf("%d",&i);
xunhuan(a,0);
}
xunhuan(char a[], int n)
{
int j;
if(n == i)
{
a[i]='\0';
printf("%s\n",a);//输出数被赋值的数组a
return 0;
}
else{
for(j=0;j<i;j++)//
{ //check;
a[n]='\0';//a[0]='\0';
if(strchr(a,array[j])!=NULL) continue;
a[n]=array[j];//这句只是做了初始化;排列是哪一句!?小弟实在看不出来!
xunhuan(a,n+1);}}}
...全文
20 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
panzhaoping 2003-10-27
  • 打赏
  • 举报
回复
其实这种尾第归是可以消除的,用for来代替
mfcer2 2003-09-25
  • 打赏
  • 举报
回复
关注中
leeajax 2003-09-24
  • 打赏
  • 举报
回复
#include<iostream.h>
int n=0;
struct node
{
int val;
node* next;
};

node li={0,NULL};

void print(node* l)//首结点指针
{
while(l)
{
cout<<l->val;
l=l->next;
}
cout<<endl;
}

void insert(node* p,int i)
{
node* temp=new node;
temp->val=i;
temp->next=p->next;
p->next=temp;
}

void del(node* p)//del next p
{
node* temp=p->next;
p->next=p->next->next;
delete temp;
}

void en(node* l,int i)
{
if(i==n)
{
print(l->next);
return;
}
node *p=l;
for(int j=0;j<i+1;++j,p=p->next)
{
insert(p,i);
en(l,i+1);
del(p);

}

}

void main()
{
cin>>n;
en(&li,0);
}
darcymei 2003-09-16
  • 打赏
  • 举报
回复
显式的转换一下吧
做计算器应该在输入数据后根据功能的分类,对数据进行一下处理吧
而且你这里返回double型的 y==0容易出错
yijiangmei 2003-09-16
  • 打赏
  • 举报
回复
double gcd(double x,double y)//对于int 以外的数求不出它们的公约数
{ if (y==0)return x;
else return gcd(y,x%y);
}

这是求最大公约数的公式,可是像我上面这样,把它return (y,x%y)编译就报错了啊!这是怎么回事啊!难道改为double 型就不行了嘛?
各位大哥,帮帮忙啊!我要做个计算器,势必要double型的啊!用int 型是不够的啊!
挺拔的劲松 2003-09-11
  • 打赏
  • 举报
回复
#include<iostream.h>
int n;
int next(int* data);
void sort(int* data,int k);

void main()
{
cout<<"输入一个自然数:";
cin>>n;
int* data=new int[n],j=1,m=0,ret=1;
for(int i=0;i<n;i++) data[i]=i+1;
cout<<n<<" 阶全排列为"<<endl;
if(n<2) {cout<<1<<endl;return;}
while(ret!=0){
m++;
for(i=0;i<n;i++) cout<<data[i]<<" ";
cout<<endl;
ret=next(data);
}
cout<<n<<" 阶全排列数 = "<<m<<endl;
delete[] data;
}
int next(int* data)
{
for(int i=n-2;i>-1;i--)
if(i==0 || data[i]<data[i+1]) break;
if(i==0 && data[0]==n) return 0;
int j=i+1;
for(int k=i;k<n;k++)
if(data[k]>data[i] && data[k]<data[j]) j=k;
int temp=data[j];
data[j]=data[i];
data[i]=temp;
sort(data,i+1);
return 1;
}
void sort(int* data,int k)
{
if(k>n-2) return;
int s=k;
for(int j=k;j<n;j++)
if(data[j]<data[s]) s=j;
int temp=data[k];
data[k]=data[s];
data[s]=temp;
sort(data,k+1);
}
feng8208 2003-09-11
  • 打赏
  • 举报
回复
就是xunhuan(a,n+1);递归调用。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧