|
10鱼币
#include<stdio.h>
void pomp(int n, int a[]);
void print(int a[]);
int judge(int n, int a[])//用来判断一个数组中有没有一样的元素
{
int temp;
int num = 0;
for(int i = 0; i < n; i++)
{
temp = a[i];
for(int j = i + 1; j < n; j++)
{
if(temp == a[j])
{
num = 1;
break;
}
}
if(num == 1)
{
break;
}
}
return num;
}
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a[4] = {1,2,3,4};
pomp(4, a);
return 0;
}
void pomp(int n,int a[])
{
for(int i = 4-n; i < 4; i++)
{
int j = 0;
int b[n];
for(int i = 0; i < n; i++)
{
b[i] = i + 9;//我的想法是在这里使得b数组中的值都不一样
}
if(n > 2)
{
pomp(n-1, a);
}else
{
print(a);
}
swap(&a[4-n], &a[5-n]);
b[j] = a[4-n];
j++;
while(judge(n,b))//我认为在这里出了问题,当b中数组没有重复时,不进入循环,理想状态发现重复后进入循环,让a[n]与a[n+2]交换,用b[j]保存a此时的元素,若b数组依然有重复则让a[n]再与a[n+3]交换,直到b数组中没有重复为止,
{ //b数组用来保存a[4-n]~a[3]的值(因为这里a数组的长度为4,所以a[4-n]~a[3]);
swap(&a[4-n],&a[5-n+j]);
b[j] = a[4-n];
if(j != n-2)
{
b[j] = a[4-n];
}else
{
break;
}
}
}
}
void print(int a[])
{
for(int i = 0; i < 4; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
本帖最后由 jhq999 于 2022-11-20 22:20 编辑
数组元素是0~9的数字吗?
数组是不是得去重?
排列时元素只允许出现一次?
- #include<stdio.h>
- int qucong(int a[],int n)
- {
- int i,j,k,m;
- for(i=0;i<n;i+=1)
- {
- for(j=i+1,k=i+1,m=0;j<n;j+=1,k+=1)
- {
- if(a[i]==a[j])k+=1,m+=1;
- a[j]=a[k];
- }
- n-=m;
- }
- return n;
- }
- int m,b[64],c=0;
- int pailie(int a[],int n)
- {
- if(0==n)
- {
- for(int i=0;i<m;i+=1)printf("%d",a[b[i]-1]);
- c+=1;
- printf("\n");
- }
- else for(int i=0;i<m;i+=1)
- {
- int j=0;
- for(;j<m;j+=1)if(i==b[j]-1)break;
- if(j==m)
- {
- b[m-n]=i+1;
- pailie(a,n-1);
- b[m-n]=-1;
- }
- }
- return c;
- }
- int main()
- {
- int a[]={1,1,2,3,2,5,4};
- m=qucong(a,sizeof(a)/sizeof(int));
- pailie(a,m);
- return 0;
- }
复制代码
|
-
这是现在的运行结果
最佳答案
查看完整内容
数组元素是0~9的数字吗?
数组是不是得去重?
排列时元素只允许出现一次?
|