我有我的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