旋转整数的二维数组
Rotating two dimensional array of integers
我的 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++标签标记了这个问题,尽管除了一些未使用的标题外,我没有看到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
如果这是您需要的,那么您可以根据需要修改程序:)
这将完成工作,而无需存储整个矩阵。 (将nextNum
替换为您正在阅读的数字):
int main() {
int m; // # of matrices to read/shift/print
// Get # of matrices
m = nextNum();
for ( ; m>0; m-- ) {
int h, w; // dimensions of matrix
int s1; // value read from first column of one row to be printed in next row
int i, j; // index variables
int r[101]; // space to save a row
// Get matrix dimensions
h = nextNum();
w = nextNum();
// Read top-left value
s1 = nextNum();
// Read rest of first row & print it; since we skipped 1st value, is shifted left
for ( i=1; i<w; i++ ) {
int n = nextNum();
printf( "%d ", n );
}
// Process each remaining row of input
for ( i=1; i<h; i++ ) {
int last = i==h-1 ? 1 : 0; // = 1 if last row, 0 o/w
// Read in the row
for ( j=0; j<w; j++ )
r[j] = nextNum();
// Print end of it to finish off previous row;
// print start of next w/ value save from start of previous row
printf( "%dn%d ", r[w-1], s1 );
// Print current row (if last row, include the 1st column)
for ( j=1-last; j<w-1-last; j++ )
printf( "%d ", r[j] );
s1 = r[0];
}
// Print the second-to-last item of the last row read,
printf( "%dn", r[w-2] );
}
}
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 将整数线读取到二维数组中
- 打印空白,而不是二维数组c++中的整数
- 旋转整数的二维数组
- visual C++将整数的二维数组插入到另一个整数的二维阵列中
- 编写一个程序,使用冒泡排序对二维数组中的整数按升序排序