Страница 1 из 1
с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2 «зм
Добавлено: 08 окт 2010, 21:43
Killer
Помогите решить
Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2 «змейкой», например для n=5 получить матрицу:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
Матрици еще не проходили так что наверно можно ре шить без них иначе бы препод не давал такого зашибенного задания...
Мучаюсь часа 3 нечего вголову прийти не может...
пробовал по разному
и да же так
Код: Выделить всё
#include "h/iostream.h"
int main(){
int x,z,s,w=0;int i=0;
cin>>x;
while(i<=x*x){ i++;
if(i<=x){
//while(i<=x){ i++;
if(i<x){cout<<i<<" ";};
if(i==x){cout<<i<<"\n";};//};
}
else
{while(i<=x*x){w=i+x;s--;
if(w>x){cout<<s<<" ";};
if(w==x){cout<<s<<"\n";};
};};
}
return 0;
}
Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 09 окт 2010, 08:09
Albor
Killer писал(а):Матрици еще не проходили
А двумерные массивы проходили? В задании ни чего нет "зашибенного", если разберёшся с двумерным массивом.
Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 08:23
devC
можно так:
Код: Выделить всё
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int i,j,n,k=1;
cin>>n;
int a[n][n];
for(i=0;i<n;i++)
if(i%2==0)
for(j=0;j<n;j++) a[i][j]=k++;
else
for(j=n-1;j>=0;j--)a[i][j]=k++;
for(i=0;i<n;i++){
for(j=0;j<n;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 09:11
Decoder
int i,j,n,k=1;
cin>>n;
int a[n][n];
Вот так точно не будет работать. Либо
n должна быть константой, либо нужно динамически выделять память под массив.
Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 13:18
BulldozerBSG
Decoder писал(а):Вот так точно не будет работать. Либо n должна быть константой, либо нужно динамически выделять память под массив.
Жаль что это не C99 там такое можно

Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 17:23
devC
Decoder писал(а):Вот так точно не будет работать. Либо n должна быть константой, либо нужно динамически выделять память под массив.
Работает же!
$ g++ main.cpp -o it_works
$ ./it_works
5
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
PS: можно и динамически, только, вряд ли, это более понятно:
Код: Выделить всё
int *a,i,j,n,k=1;
cin>>n;
a=(int*)malloc(sizeof(int)*n*n);
Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 18:37
azrael
А в студии не работает: "error C2057: expected constant expression"

)
PS: можно и динамически, только, вряд ли, это более понятно:
Вот и зря, задача явно подразумевает динамическое выделение памяти, поэтому именно это и нужно сделать, а не путать человека

Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 18:41
BulldozerBSG
а студия это не gcc

Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 18:44
azrael
BulldozerBSG писал(а):а студия это не gcc
Спасибо, я в курсе

Re: с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2
Добавлено: 15 окт 2010, 20:18
devC
Так лучше? наверное VC тоже поймет:
Код: Выделить всё
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char** argv)
{
int *a,i,j,n,k=1;
cin>>n;
a=(int*)malloc(sizeof(int)*n*n);
for(i=0;i<n;i++)
if((n*i)%2==0)
for(j=0;j<n;j++) a[n*i+j]=k++;
else
for(j=n-1;j>=0;j--)a[n*i+j]=k++;
for(i=0;i<n;i++){
for(j=0;j<n;j++) cout<<a[i*n+j]<<" ";
cout<<endl;
}
free(a);
return 0;
}
есть много компиляторов, и многообразен язык.
Только "хорошо все, что не кажется мне странным" Matz