У меня проблема с задачей для моей ИТ-школы. Проблема заключается в следующем: Поверните рамку массива влево. Вход: Сначала получите количество тестов (t). Затем для каждого теста получаем l и k (строка и столбец), 3 < = l, k < = 100. Затем заполните матрицу цифрами от пользователя.Вращающийся двумерный массив целых чисел
Input:
1
3 3
1 2 3
4 5 6
7 8 9
Output:
2 3 6
1 5 9
4 7 8
Мой код до сих пор:
#include<iostream>
#include<cstdio>
#include<cstdlib>
int main()
{
int t, w, k;
int tab[101][101];
int t1[101], t2[101], t3[101], t4[101];
scanf_s("%d", &t);
for (int i = 0; i < t; i++) {
scanf_s("%d %d", &w, &k);
for (int j = 0; j < w; j++) {
for (int x = 0; x < k; x++) {
scanf_s("%d", &tab[j][x]);
if (j == 0) { //1 linia
t1[x] = tab[j][x];
}
if (j + 1 == w) { //3 linia
t2[x] = tab[j][x];
}
if (x == 0) { //2 linia
t3[j] = tab[j][x];
}
if (x + 1 == k) { //4 linia
t4[j] = tab[j][x];
}
}
}
printf("\n");
}
for (int j = 0; j < w; j++) {
for (int x = 0; x < k; x++) {
if (j == 0) {
if (x == 0) {
tab[j][x] = t3[1];
}
else if (x + 1 != k-1) {
tab[j][x] = t1[j + 1];
}
else if (x + 1 == k-1) {
tab[j][x] = t4[1];
}
}
if (j + 1 == w) {
if (x == 0) {
tab[j][x] = t3[k - 2];
}
else if (x + 1 == k - 1) {
tab[j][x] = t4[w-2];
}
else if (x + 1 != k-1) {
tab[j][x] = t2[x + 1];
}
}
}
}
for (int j = 0; j < w; j++) {
for (int x = 0; x < k; x++) {
printf("%d ", tab[j][x]);
}
printf("\n");
}
printf("\n");
system("pause");
return 0;
}
Я знаю, что я делаю неправильно репозиционирования. Я попробовал это как 5 различных способов. Если бы кто-нибудь показывал мне способ повторения через таблицу движущихся значений влево. Буду признателен. Также имейте в виду, что я не должен быть равен k.
Какие еще четыре вещи вы пробовали? Почему они ошибались? Почему эта попытка ошибочна? Вы вначале решили проблему логически? Вы понимаете каждый шаг, который вы должны предпринять для решения проблемы? Наконец, если вы это сделали, вы должны прочитать [эту замечательную статью Эрика Липперта] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) о том, как отлаживать небольшие программы, такие как как ваш. –
«Поверните рамку массива влево» - это не очень точная постановка задачи. (И ваша программа C, а не C++). – ooga
Вам нужно заполнить переменную или просто распечатать ее? –