黑马程序员技术交流社区
标题:
如何让交换二维数组的列
[打印本页]
作者:
ydy2511000
时间:
2016-1-21 23:12
标题:
如何让交换二维数组的列
让第一列给第二列,第二列给第三列,第三列给第四列.....最后一列给第一列
作者:
ff774411
时间:
2016-1-22 00:27
随便写了下, 最原始的方法,你可以参考下
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a[3][4] = {1,3,2,5,4,7,9,0,10,11,6,8};
for (int i =0; i<3; i++) {
for (int j=0; j<4; j++) {
printf(" %2d ",a[i][j]);
}
printf("\n");
}
printf("*****************************\n");
int temp[3] ={};
for (int i=0; i<3; i++) {
temp[i] = a[i][0];
}
for (int i=0; i<3; i++) {
printf(" %2d ",temp[i]);
}
printf("\n*****************************\n");
int b[3][4];
for (int i =0; i<3; i++) {
for (int j=0; j<4; j++) {
b[i][j] = a[i][j+1];
}
}
printf("\n*****************************\n");
for (int i =0; i<3; i++) {
for (int j=0; j<4; j++) {
b[i][3] = temp[i];
}
}
for (int i =0; i<3; i++) {
for (int j=0; j<4; j++) {
printf(" %2d ",b[i][j]);
}
printf("\n");
}
}
return 0;
}
复制代码
作者:
佛聆
时间:
2016-1-22 21:57
有简便的方法吗
作者:
ydy2511000
时间:
2016-1-23 00:08
佛聆 发表于 2016-1-22 21:57
有简便的方法吗
当然有了~~~你用另一个数组先保存下这个数组,然后把前一列给后一列,单独把最后一列给第一列,就可以了
作者:
小石头16544
时间:
2016-1-23 11:23
我觉得二楼的方法逻辑已经足够简单了
作者:
guyuexing
时间:
2016-1-23 23:26
谁能解释一下二楼28行和34行的代码是什么意思
作者:
ydy2511000
时间:
2016-1-24 00:50
本帖最后由 ydy2511000 于 2016-2-4 08:31 编辑
好吧,说下我认为最简单的方法,就是从后面往前面循环,
1.先把最后一列存到一个一维数组
2.把倒数第二列给最后一列,倒数第3列给倒数第2列,....第1列给第2列,第0列给第1列(这样不会出现覆盖)
3.最后把存起来的最后一列给第一列
//
// main.c
// test3
//
// Created by ydy on 16/1/24.
// Copyright © 2016年 ydy. All rights reserved.
//
#include <stdio.h>
#define ROWS 3
#define COLS 3
int arr[ROWS][COLS] = {{1,2,3},{1,2,3},{1,2,3}};
int main(int argc, const char * argv[]) {
//输出数组,交换前
printf("交换前\n");
for(int i= 0 ; i < ROWS;i++)
{
for (int j = 0; j < COLS; j++) {
printf("%d ",arr[i][j]);
}
printf("\n");
}
//数组列交换
//1.先取出数列的最后
int lastCol[COLS];
for (int i = 0; i< ROWS;i++ ) {
lastCol[i] =arr[i][COLS-1];
}
//arr[][cols-2] = arr[][cols-1],...,arr[][0] = arr[][1]
for (int i = COLS-1; i>0; i--) { //交换列,外层控制列, 内层控制行
for (int j = 0; j< ROWS; j++) {
arr[j][i]=arr[j][i-1];
}
}
//把最后一列给第一列,搞定
for (int i = 0; i< ROWS; i++) {
arr[i][0]=lastCol[i];
}
//输出
printf("交换后\n");
for(int i= 0 ; i < ROWS;i++)
{
for (int j = 0; j < COLS; j++) {
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2