我有我的IT學校任務的問題。問題是: 將陣列的框架向左轉。 輸入: 首先得到測試數(t)。然後,對於每個測試得到I和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/)作爲你的。 – 2014-12-04 19:02:29
「將數組的框架置於左邊」不是一個非常精確的問題陳述。 (而你的程序是C,而不是C++)。 – ooga 2014-12-04 19:04:45
你需要填寫一個變量,或者只是打印出來嗎? – 2014-12-04 19:09:10