Другие языки программирования и технологии

Двумерный массив с++ Пожалуйста =(

Сформировать следующий двумерный массив:
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1
Все форумы облазил, но ничего не нашёл. Может хоть Вы поможете?
Пробовал делать так:
int main()
{
int j, i, mas[5][5], s = 1;

for (j = 0; j < 5; j++)
{
for (i = 0; i < 5 + j; i++)
{
mas[i][j + i] = mas[i + j][i] = s;
}
s++;
}

/* вывод на экран */
for (i = 0; i<5; i++) {
for (j = 0; j<5; j++)

printf("%2d ", mas[i][j]);
printf("\n");
}
system("pause");
return 0;
}

Получается вот такая матрица:
1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1 - Числа над главной диагональю расположены так как надо, но вот под ней (

Можно, наверное, и так:
// верхняя треугольная матрица
for (int i = 0; i < N; i++)
for (int j = i; j < M; j++)
F[i][j] = 0;

// нижняя треугольная матрица
for (int i = 0; i < N; i++)
for (int j = 0; j <= i; j++)
F[i][j] = 0;
И в них уже отдельно прописывать.
Но до меня не доходит. . .

....

#include <stdio.h>
#include <conio.h>
main()
{
for(i=0; i< 5; i++)
{
for ( j=1; j<6-i; j++)
{
printf("%d", j);
}
printf("\n");

for ( x=5-i; x<=5; x++)
{
printf("%d", x);
}

}
getch();
}
То что нужно, но не массив. Можно этот код к массиву пристроить?

Если кто знает код со сдвигом, то напишите, буду очень признателен!
mas[i][j] = (5-i+j) % 5 + 1 ?

mas[0][0] = (5-0+0) % 5 + 1 = 1
mas[1][0] = (5-1+0) % 5 + 1 = 4 + 1 = 5
Юрий Драшко
Юрий Драшко
8 955
Лучший ответ
Со сдвигом? Да пожалуйста!

#include <iostream>
using namespace std;
void shift_right(int*, int, int);
void shift_right(int*, int);
int main() {
const int n = 5;
int a[n][n];
for (int r = 0, c, m; r < n; ++r, cout << endl) {
for (c = 0, m = 1; c < n; ++c, ++m) a[r][c] = m;
shift_right(a[r], n, r);
for (c = 0; c < n; ++c) cout << ' ' << a[r][c];
}
cin.get();
}
void shift_right(int* a, int n, int q) { if (a) for (int k = 0; k < q; ++k) shift_right(a, n); }
void shift_right(int* a, int n) {
if (a && n > 1) {
int tmp = a[n - 1], k;
for (k = n - 1; k; --k) a[k] = a[k - 1];
a[k] = tmp;
}
}

Этот код использует функцию сдвига элемента линейного массива вправо на одну позицию.
Также имеется перегруженная функция, которая имеет дополнительный третий параметр. Он указывает на сколько позиций следует сдвинуть все элементы массива.

Как это сделать для сдвига влево - решите в домашнем задании. Ответ жду по почте. Оценивать буду с фанатичной предвзятостью)
KP
Kosty@ Pritoluk
94 204
Может надо так: ?
#include <iostream>
using namespace std;
int main()
{ int j,k,N;
cout << "(N x N), N="; cin >>N;
int* a=new int[N*N];
int** p=new int*[N];
for(j=0;j-N;p[j++]=&a[j*N]);
for(k=0;k-N;k++) for(j=0;j-N;a[N*k+j]=1+(k+j++)%N);
for(j=0;j-N;j++,cout << endl) for(k=0;k-N;k++) cout << p[j][k] << '\t';
delete [] a,p;
return 0;
}
Сергей Синицов
Сергей Синицов
76 473
Думаешь кто-то 'за спасибо' будет на тебя работать?!