从0到9,任意选取5个数,输出这五个数的所有排列(用C语言编程)

如题所述

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int b[5], rank[5];
bool used[10] = {false};
bool p_used[5] = {false};
void Permutation(int deep);
void main()
{
int i = 0, j = 0, k = 0, temp;
srand((unsigned)time(NULL));
for(i = 0; i < 5; i++)
{
temp = rand()%9;
for(k = 0; k < 10; k++)
{
if(a[k] == temp)
{
if(used[k] == false)
{
b[j++] = temp;
used[k] = true;
break;
}
else
{
i--;
break;
}
}
}
}
Permutation(0);
printf("\n");
}
void Permutation(int deep)
{
int i;
if(deep == 5)
{
printf("%d %d %d %d %d\n",b[rank[0]], b[rank[1]], b[rank[2]], b[rank[3]], b[rank[4]]);
}
for(i = 0; i < 5; i++)
{
if(p_used[i] == true)
continue;
p_used[i] = true;
rank[deep] = i;
Permutation(deep + 1);
p_used[i] = false;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-27
#include<stdio.h>
int outtext(char file[]);
int getline(FILE *fp);
int main()
{
int i,j,temp[10]={0},flag,count=0;
for(i=12345;i<=98765;i++)
{
flag=1;
temp[i%10]++;
temp[i/10%10]++;
temp[i/100%10]++;
temp[i/1000%10]++;
temp[i/10000%10]++;
for(j=0;j<10;j++)
{
if(temp[j]>1) flag=0;
temp[j]=0;
}
if(flag)
{
printf("%d ",i);
++count;
if(count==10)
{
count=0;
putchar('\n');
}
}

}
getchar();
return 0;
}
================================
共有45360种可能,
下面是待文件输出版
=======================
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j,temp[10]={0},flag,count=0;

FILE *fp;
fp=fopen("out.txt","w+");

if(fp==NULL)
{
printf("文件操作失败!\n");
getchar();
exit(0);
}

for(i=12345;i<=98765;i++)
{
flag=1;
temp[i%10]++;
temp[i/10%10]++;
temp[i/100%10]++;
temp[i/1000%10]++;
temp[i/10000%10]++;
for(j=0;j<10;j++)
{
if(temp[j]>1) flag=0;
temp[j]=0;
}

if(flag)
{

printf("%d ",i);
fprintf(fp,"%d ",i);
++count;
if(count==10)
{
count=0;
putchar('\n');
fputc('\n',fp);
}
}

}
getchar();
return 0;
}
第2个回答  2012-05-27
123456
相似回答