A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ydy2511000 中级黑马   /  2016-1-21 23:12  /  1284 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

让第一列给第二列,第二列给第三列,第三列给第四列.....最后一列给第一列

6 个回复

倒序浏览
随便写了下, 最原始的方法,你可以参考下

  1. int main(int argc, const char * argv[]) {
  2.     @autoreleasepool {
  3.      
  4.         int a[3][4] = {1,3,2,5,4,7,9,0,10,11,6,8};
  5.         for (int i =0; i<3; i++) {
  6.             for (int j=0; j<4; j++) {
  7.                 printf("   %2d    ",a[i][j]);
  8.             }
  9.             printf("\n");
  10.         }
  11.         
  12.         printf("*****************************\n");
  13.         
  14.         int temp[3] ={};
  15.         for (int i=0; i<3; i++) {
  16.             temp[i] = a[i][0];
  17.         }
  18.         for (int i=0; i<3; i++) {
  19.             printf("  %2d  ",temp[i]);
  20.         }
  21.         printf("\n*****************************\n");
  22.         
  23.         int b[3][4];
  24.         
  25.         for (int i =0; i<3; i++) {
  26.             for (int j=0; j<4; j++) {
  27.                 b[i][j] = a[i][j+1];
  28.             }
  29.         }
  30.         printf("\n*****************************\n");
  31.         
  32.         for (int i =0; i<3; i++) {
  33.             for (int j=0; j<4; j++) {
  34.                 b[i][3] = temp[i];
  35.             }
  36.         }
  37.         
  38.         for (int i =0; i<3; i++) {
  39.             for (int j=0; j<4; j++) {
  40.                 printf("   %2d    ",b[i][j]);
  41.             }
  42.             printf("\n");
  43.         }
  44.         
  45.         
  46.     }
  47.     return 0;
  48. }
复制代码
回复 使用道具 举报
有简便的方法吗
回复 使用道具 举报
佛聆 发表于 2016-1-22 21:57
有简便的方法吗

当然有了~~~你用另一个数组先保存下这个数组,然后把前一列给后一列,单独把最后一列给第一列,就可以了
回复 使用道具 举报
我觉得二楼的方法逻辑已经足够简单了
回复 使用道具 举报
谁能解释一下二楼28行和34行的代码是什么意思
回复 使用道具 举报
本帖最后由 ydy2511000 于 2016-2-4 08:31 编辑

好吧,说下我认为最简单的方法,就是从后面往前面循环,
1.先把最后一列存到一个一维数组
2.把倒数第二列给最后一列,倒数第3列给倒数第2列,....第1列给第2列,第0列给第1列(这样不会出现覆盖)
3.最后把存起来的最后一列给第一列
  1. //
  2. //  main.c
  3. //  test3
  4. //
  5. //  Created by ydy on 16/1/24.
  6. //  Copyright © 2016年 ydy. All rights reserved.
  7. //

  8. #include <stdio.h>
  9. #define ROWS 3
  10. #define COLS 3
  11. int arr[ROWS][COLS] = {{1,2,3},{1,2,3},{1,2,3}};
  12. int main(int argc, const char * argv[]) {
  13.     //输出数组,交换前
  14.     printf("交换前\n");
  15.     for(int i= 0 ; i < ROWS;i++)
  16.     {
  17.         for (int j = 0; j < COLS; j++) {
  18.             printf("%d ",arr[i][j]);
  19.         }
  20.         printf("\n");
  21.     }

  22.     //数组列交换
  23.     //1.先取出数列的最后
  24.     int lastCol[COLS];
  25.     for (int i = 0; i< ROWS;i++ ) {
  26.         lastCol[i] =arr[i][COLS-1];
  27.     }
  28.     //arr[][cols-2] = arr[][cols-1],...,arr[][0] = arr[][1]
  29.     for (int i = COLS-1; i>0; i--) {    //交换列,外层控制列, 内层控制行
  30.         for (int j = 0; j< ROWS; j++) {
  31.             arr[j][i]=arr[j][i-1];
  32.         }
  33.     }
  34.    
  35.     //把最后一列给第一列,搞定
  36.     for (int i = 0; i< ROWS; i++) {
  37.         arr[i][0]=lastCol[i];
  38.     }
  39.     //输出
  40.     printf("交换后\n");
  41.     for(int i= 0 ; i < ROWS;i++)
  42.     {
  43.         for (int j = 0; j < COLS; j++) {
  44.             printf("%d ",arr[i][j]);
  45.         }
  46.         printf("\n");
  47.     }
  48.    
  49.    
  50.    
  51.     return 0;
  52. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马