с++ Дано натуральное число n. Заполнить квадратную матрицу nxn числами от 1 до n2 «зм

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Killer
Сообщения: 1
Зарегистрирован: 08 окт 2010, 21:41

Помогите решить
Дано натуральное число 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;
}
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Killer писал(а):Матрици еще не проходили
А двумерные массивы проходили? В задании ни чего нет "зашибенного", если разберёшся с двумерным массивом.
devC
Сообщения: 3
Зарегистрирован: 15 окт 2010, 08:16

можно так:

Код: Выделить всё

#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;
}
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

int i,j,n,k=1;
cin>>n;
int a[n][n];
Вот так точно не будет работать. Либо n должна быть константой, либо нужно динамически выделять память под массив.
Поумнеть несложно, куда труднее от дури избавиться.
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

Decoder писал(а):Вот так точно не будет работать. Либо n должна быть константой, либо нужно динамически выделять память под массив.

Жаль что это не C99 там такое можно :)
devC
Сообщения: 3
Зарегистрирован: 15 окт 2010, 08:16

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);
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

А в студии не работает: "error C2057: expected constant expression" :) )
PS: можно и динамически, только, вряд ли, это более понятно:
Вот и зря, задача явно подразумевает динамическое выделение памяти, поэтому именно это и нужно сделать, а не путать человека :)
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

а студия это не gcc :)
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

BulldozerBSG писал(а):а студия это не gcc :)
Спасибо, я в курсе :)
devC
Сообщения: 3
Зарегистрирован: 15 окт 2010, 08:16

Так лучше? наверное 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
Ответить