gpt4 book ai didi

c++ - 旋转二维整数数组

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:22 25 4
gpt4 key购买 nike

我的 IT 学校任务有问题。问题是 :将数组的框架向左旋转。输入 :首先获取测试次数 (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 种不同的方法。如果有人会告诉我一种遍历表的方法,将值向左移动。我会很感激。还要记住,l 不必等于 k。

最佳答案

你用 C++ 标记标记了问题,但除了一些未使用的 header 外,我没有看到任何 C++。:)

所以我用 C 编写了演示程序。

如果我没理解错的话,您需要如下内容。只有我没有输入数组的值。该数组最初设置。

#include <stdio.h>

#define N 3

int main( void )
{
int a[N][N] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
size_t i;

for ( i = 0; i < N; i++ )
{
size_t j;
for ( j = 0; j < N; j++ ) printf( "%d ", a[i][j] );
printf( "\n" );
}

printf( "\n" );

int tmp = a[0][0];

for ( i = 1; i < N; i++ ) a[0][i-1] = a[0][i];
for ( i = 1; i < N; i++ ) a[i-1][N-1] = a[i][N-1];
for ( i = 1; i < N; i++ ) a[N-1][N-i] = a[N-1][N-i-1];
for ( i = 1; i < N - 1; i++ ) a[N-i][0] = a[N-i-1][0];
a[N-i][0] = tmp;

for ( i = 0; i < N; i++ )
{
size_t j;
for ( j = 0; j < N; j++ ) printf( "%d ", a[i][j] );
printf( "\n" );
}

return 0;
}

输出是

1 2 3 
4 5 6
7 8 9

2 3 6
1 5 9
4 7 8

如果它是你需要的那么你可以根据你的要求修改程序。:)

关于c++ - 旋转二维整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com