Прежде всего, я хотел бы знать, если это возможно. Если это так, пожалуйста, проверьте мой код и скажите мне, что не так.

int m[n]; // this is where I pass the values to a array
for(int i=0;i<n;i++) { 
    scanf("%d",&a);
    m[i]=a;

}

int v[n][b]; // this is where I pass the values from a array to a 2d array
for(int i=0;i<n;i++) { // but for some reason it doesnt work
        for(int j=0;j<b;j++) {
                v[i][j]=m[i];
            }
        }
}

Выход: что-то вроде этого

v[0][0]:0
v[0][1]:0
v[1][0]:1
v[1][1]:1
....

Но я хочу что-то вроде этого:

 v[0][0]:0
 v[0][1]:1
 v[1][0]:2
 v[1][1]:3

Без повторения значений

P.S. Если мне нужно использовать указатели, вы также можете объяснить мне это, но я бы предпочел первый.

1
ToshiYuki 24 Фев 2018 в 03:22

3 ответа

Лучший ответ

При назначении v[i][j] вы постоянно переназначаете любое значение, которое было в m[i].

Вместо этого попробуйте:

v[i][j] = m[i*n + j];

Это будет работать только в том случае, если массив m имеет элементы n*b.

i*n представляет строку, над которой вы работаете, а j - столбец. Или наоборот, вам решать, как вы себе это представляете.

1
Pablo 24 Фев 2018 в 00:52

Предполагая, что в вашем одномерном массиве по крайней мере столько же элементов, сколько в двумерном массиве, и вы хотите заполнить двумерный массив в мажорном порядке, достаточно просто увеличивать индекс для вашего одномерного массива каждый раз, когда вы читаете из него элемент.

int v[n][b];
int k = 0;
for(int i=0;i<n;i++) {
   for(int j=0;j<b;j++) {
       v[i][j]=m[k++];
   }
}
0
merlin2011 24 Фев 2018 в 01:55
#include <stdio.h>

int main(){
    int m[6]; // this is where I pass the values to a array
    int i;
    int j;
    int k;
    int a;
    for(i=0;i<6;i++) { 
        scanf("%d",&a);
        m[i]=a;
    }

    k=0;
    int v[2][3]; // this is where I pass the values from a array to a 2d array
    for(i=0;i<2;i++) { // but for some reason it doesnt work
        for(j=0;j<3;j++) {
            v[i][j]=m[3*k+j]; // 3 is the maximum i value [n of your code]
        }
        k++;
    }

    return 0;
}

Просто использовал код OP и изменил:

1) Определены все целочисленные переменные.

2) int внутри для удаленного, чтобы быть совместимым кодом с каждым компилятором c (OP действительно не нуждается в этих изменениях)

3) Добавили переменную k, которая была увеличена с изменениями переменной внешнего цикла, и использовали ее в команде v[i][j]=m[3*k+j];, чтобы дать соответствующее значение m новому массиву. (3 объяснено в комментарии той же строки) См. комментарий @ Pablo, чтобы не использовать k

0
koleygr 24 Фев 2018 в 01:09