我这个程序哪里出错了啊~
数字排列问题列出所有从数学1到N的连续自然数排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入:N(1<=n<=9)
输出:由1~N组成的所有不重复的数字序列,每行一个序列。
int b;
int c[10];
void count(int a)
{
int i,j,m;
if (a>b)
{
for(i=1;i<=b;i++) printf("%d",a[i]);
printf("\n");
}
else
{
for (i=1;i<=b;i++)
{
for (i=1;j<a;j++)
{
if (i!=a[j]) m=0; else m=1;
}
if (m=0) c[a]=i;
conut(a+1);
}
}
}
main()
{
printf("Input a number(N<=10):");
scanf("%d",&b);
count(1);
}
----------------解决方案--------------------------------------------------------
不怎么会写啊。。。期待高手解决。。。。
----------------解决方案--------------------------------------------------------
生成全排列么????
递归解决....
----------------解决方案--------------------------------------------------------
楼上的给一个看看啊。。。。
----------------解决方案--------------------------------------------------------
void perm(int* arr,int k, int n) //生成k-n的排列
{
if(k==n-1)
{
for(int i=0;i<n;i++)
printf("%d ",arr[i]);
printf("\n");
}
else
{
for(int p=k;p<n;p++)
{
int temp = arr[k];
arr[k]= arr[p];
arr[p] =temp;
perm(arr,k+1,n);
temp=arr[k];
arr[k]=arr[p];
arr[p]=temp;
}
}
}
----------------解决方案--------------------------------------------------------
非递归的:
int fun(int n)
{
if(n==1) return 1;
else return fun(n-1)*n;
}
void perm(int* arr,int n) //生成n的全排列
{
if(n==1) printf("%d ",arr[n-1]) ;
for(int i=0;;)
{
if(n==0) break;
for(int j=0;j<n-1;j++)
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
for(int k=0;k<n;k++) //打印
{
printf("%d ",arr[k]);
printf("\n");
}
++i;
}
if(i==fun(n)) break;
}
}
----------------解决方案--------------------------------------------------------
递归这个东西一直不是很明白。让我在仔细看看啊。谢谢楼上的。。。。
----------------解决方案--------------------------------------------------------
终于弄懂了,画了半天的递归的图啊。看来递归还要好好看看啊
#include<stdio.h>
main()
{ void perm(int*,int,int);
int b;
int c[10]={1,2,3,4,5,6,7,8,9,10};
printf("Input a number(N<=10):");
scanf("%d",&b);
fflush(stdin);
perm(c,0,b);
}
void perm(int* arr,int k, int n) //生成k-n的排列
{ int i,p,temp;
if(k==n-1)
{
for( i=0;i<n;i++)
printf("%d ",arr[i]);
printf("\n");
}
else
{
for( p=k;p<n;p++)
{
if(k!=p)
{
temp= arr[k];
arr[k]= arr[p];
arr[p] =temp;
}
perm(arr,k+1,n);
if(k!=p)
{
temp= arr[k];
arr[k]= arr[p];
arr[p] =temp;
}
}
}
}
----------------解决方案--------------------------------------------------------
支持一下楼上
----------------解决方案--------------------------------------------------------
那我这个有什么问题啊~~~
感觉思路对啊。
请教达人~
----------------解决方案--------------------------------------------------------