Страница 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