C语言中的循环置换

jaql4c8m  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(152)

给定一个包含n个整数分量的数组x,写出允许执行以下操作的函数:对给定数组进行循环置换
我尝试在代码中不使用poiter,因为它最终只使用数组。
我认为问题在于pcircular中的数组丢失了,无法将值传递给write函数
注意:对于大于6的阵列,它将不起作用

#include <stdio.h>

int ArraySize(){   // get the size of the array
    int size;
    printf("What's the array size? ");
    scanf("%d", &size);
    return size;
}

void readArray(int size, int array[]){ /*put the values ​​in the first array*/
    for (int i = 0; i < size; i++){
        printf("What is the \033[1;36m%d\033[m value? ", i+1);
        scanf("%d", &array[i]);
    }
}
void pcircular(int size, int array[size][size]){ //Circular permutation function
    for (int j = 0; j <= size; j++){
        /* printf("("); */
        for (int i = 0; i < size; i++){
            if (i == size - 1){
                array[j+1][0] = array[j][i];
                /* printf("%d", array[j+1][0]); */
            }
            else{
                array[j+1][i+1] = array[j][i];
                /* printf("%d", array[j+1][i+1]);
                printf(", "); */
            }
        }
        /* printf(")"); */
        
    }
    
} 
void writeArray(int size, int array[size][size]){ //Write the Array
    for (int i = 0; i <= size; i++){
        printf("(");
        for (int j = 0; j < size; j++){
            /* printf("\ni = %d j = %d\n", i, j);  */
            printf("%d", array[i][j]);
            if (j != size-1){
                printf(", ");
            }
        }
        printf(")");
    }
    
}

void main(){
    int size = ArraySize();
    int list[size][size];     // create the array
    readArray(size, list[0]);
    pcircular(size, list);
    writeArray(size, list);
}

输入:
数组大小是多少?6
1的值是多少?1
2的值是多少?2
3的值是多少?3
4的值是多少?4
5的值是多少?5
6的值是多少?6
预期输出:(一、二、三、四、五、六)(一、二、三、四、五)(五、六、一、二、三、四)(四、五、六、一、二、三)(三、四、五、六、一、二)(二、三、四、五、六、一)(一、二、三、四、五、六)
真实的输出:(

i34xakig

i34xakig1#

编写pcircular函数如下:

void pcircular(int size, int array[size][size]){ //Circular permutation
    for (int j = 1; j <= size; j++){
        for (int i = 0; i < size; i++){
            array[j][i ] = array[j - 1][(i + 1) % size];
        }        
    }
}

但主要的问题是:

int list[size + 1][size];     // create the array

因为您创建的行比编号多一行,所以最后一行实际上是第一行的副本。
如果你不改变pcircular函数,而使用你的版本,你也应该添加到第二维。

相关问题