鱼C论坛

 找回密码
 立即注册
查看: 1552|回复: 2

[已解决]我想让数组中的元素不重复的排列组合,但是在while循环的地方出了点问题,求大佬...

[复制链接]
发表于 2022-11-20 19:38:49 | 显示全部楼层 |阅读模式
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");
}
最佳答案
2022-11-20 19:38:50
本帖最后由 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;
}
12354
12345
12534
12543
12435
12453
13254
13245
13524
13542
13425
13452
15234
15243
15324
15342
15423
15432
14235
14253
14325
14352
14523
14532
21354
21345
21534
21543
21435
21453
23154
23145
23514
23541
23415
23451
25134
25143
25314
25341
25413
25431
24135
24153
24315
24351
24513
24531
31254
31245
31524
31542
31425
31452
32154
32145
32514
32541
32415
32451
35124
35142
35214
35241
35412
35421
34125
34152
34215
34251
34512
34521
51234
51243
51324
51342
51423
51432
52134
52143
52314
52341
52413
52431
53124
53142
53214
53241
53412
53421
54123
54132
54213
54231
54312
54321
41235
41253
41325
41352
41523
41532
42135
42153
42315
42351
42513
42531
43125
43152
43215
43251
43512
43521
45123
45132
45213
45231
45312
45321

Process returned 0 (0x0)   execution time : 0.410 s
Press any key to continue.

这是现在的运行结果

这是现在的运行结果

最佳答案

查看完整内容

数组元素是0~9的数字吗? 数组是不是得去重? 排列时元素只允许出现一次?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-20 19:38:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
}
12354
12345
12534
12543
12435
12453
13254
13245
13524
13542
13425
13452
15234
15243
15324
15342
15423
15432
14235
14253
14325
14352
14523
14532
21354
21345
21534
21543
21435
21453
23154
23145
23514
23541
23415
23451
25134
25143
25314
25341
25413
25431
24135
24153
24315
24351
24513
24531
31254
31245
31524
31542
31425
31452
32154
32145
32514
32541
32415
32451
35124
35142
35214
35241
35412
35421
34125
34152
34215
34251
34512
34521
51234
51243
51324
51342
51423
51432
52134
52143
52314
52341
52413
52431
53124
53142
53214
53241
53412
53421
54123
54132
54213
54231
54312
54321
41235
41253
41325
41352
41523
41532
42135
42153
42315
42351
42513
42531
43125
43152
43215
43251
43512
43521
45123
45132
45213
45231
45312
45321

Process returned 0 (0x0)   execution time : 0.410 s
Press any key to continue.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-20 23:22:04 | 显示全部楼层
jhq999 发表于 2022-11-20 19:38
数组元素是0~9的数字吗?
数组是不是得去重?
排列时元素只允许出现一次?

感谢
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表