C:当我将一个数组复制到另一个数组时,代码停止工作

标签 c arrays

我正在尝试编写一个代码来创建一些给定数字的所有排列,然后将它们全部保存到一个数组中。 排列算法工作得很好,当我尝试将每个排列保存到数组中时,问题就出现了。该数组是一维的,所以我编写了以下代码:

    m++;
    for (int i=0;i<len;i++){
        plist[m*len+i] = v[i];
    }

其中m是函数被调用的次数(因为它是递归的),plist是我想要保存所有排列的数组,并且v 是单个排列数组。

当我运行此代码时,代码停止工作,没有任何错误。

这是完整的代码:

#include <stdio.h>
#include <stdlib.h>
int len;
int plist[100];
int m = -1;
void swap (int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

void heappermute(int v[], int n) {
    int i;
    if (n == 1) {
        m++;
        for (int i=0;i<len;i++){
            plist[m*len+i] = v[i];
        }
    }
    else {
        for (i = 0; i < n; i++) {
            heappermute(v, n-1);
            if (n % 2 == 1) {
                swap(&v[0], &v[n-1]);
        }
            else {
                swap(&v[i], &v[n-1]);
            }
    }
    }
}

int main()
{
   int num[11];
   int  i;
   printf("How many numbers you want to enter: ", len);
   scanf("%d", &len);
   printf("\nEnter %d numbers: ");
   for ( i = 0 ; i < len; i++)
       scanf("%d", &num[i]);
   heappermute(num, len);

   for (int i=0;i<96;i++){
    printf(plist[i]);
   }
   return 0;
}

问题是什么?

最佳答案

这是您的代码的工作版本:

#include <stdio.h>
#include <stdlib.h>
int len;
int plist[100];
int m = -1;

void swap (int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

void heappermute(int v[], int n) {
    int i;
    if (n == 1) {
        m++;
        for (i=0;i<len;i++){
            plist[m*len+i] = v[i];
        }
    }
    else {
        for (i = 0; i < n; i++) {
            heappermute(v, n-1);
            if (n % 2 == 1) {
                swap(&v[0], &v[n-1]);
        }
            else {
                swap(&v[i], &v[n-1]);
            }
    }
    }
}

int main()
{
   int num[11];
   int  i;
   printf("How many numbers you want to enter: ");
   scanf(" %d", &len);
   printf("\nEnter %d numbers: ", len);
   for ( i = 0 ; i < len; i++)
       scanf("%d", &num[i]);
   heappermute(num, len);

   for (i=0;i<96;i++){
    printf("%d", plist[i]);
   }
   return 0;
}

附注您不应将 plist 的大小声明为 100 个元素,而应动态地将其分配为所需的大小,例如对于 d 位数字,d *(d 的排列数)元素

关于C:当我将一个数组复制到另一个数组时,代码停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44096251/

相关文章:

arrays - 在 Swift 中对字符串数组进行排序

c - volatile 关键字如何影响静态常量数组?

c - int 指针计算平均值

c - C语言中如何计算文本文件中每行的字数

c - 为什么这个程序在这个队列程序中给出段错误

c - "Invalid argument"关于在 C 中使用 fcntl

javascript - HTML 表格转换为图像

C++ 多线程数组

jQuery 从数组中删除项目

javascript - 在字符串中添加数字