练习7-8 方阵循环右移

本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n1列变换为第nm、nm+1、⋯、n1、0、1、⋯、nm1列。

输入格式:

输入第一行给出两个正整数m和n(1)。接下来一共n行,每行n个整数,表示一个n阶的方阵。

输出格式:

按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。

输入样例:

2 3
1 2 3
4 5 6
7 8 9
 

输出样例:

2 3 1 
5 6 4 
8 9 7 
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 int main() {
 6     int n = 0;
 7     int m = 0;
 8     int** a;
 9     scanf("%d%d", &m, &n);
10     a = (int**)malloc(n * sizeof(int*));
11     for (int i = 0; i < n; i++) {
12         a[i] = (int*)malloc(n * sizeof(int));
13         for (int j = 0; j < n; j++) {
14             scanf("%d", &a[i][j]);
15         }
16     }
17 
18     m = m % (2 * n);        //举个例子,99 和 4 肯定要先99%8=3 
19     m = abs(m - n);                        //向左 m 个单位长度
20     //m %= n;                //可能值很大,我们需要把他们缩小到<n的范围
21 
22     for (int i = 0; i < n; i++) {
23         for (int j = m; j < n; j++) {
24             printf("%d ", a[i][j]);
25         }
26         for (int j = 0; j < m; j++) {
27             printf("%d ", a[i][j]);
28         }
29         printf("\n");
30 
31     }
32     /*for (int i = 0; i < n; i++) {
33         for (int j = 0; j < n; j++) {
34             printf("%d ", a[i][j]);
35         }
36         printf("\n");
37     }*/
38     return 0;
39 }

做了这个题目,我才深深意识到了,数学逻辑以及数学模型的重要性。!!!

我希望大家在做题之前,先算,算各种情况它对应的数值,怎么算出来的,把他用代码表示就ok啦!!

posted @ 2020-11-01 17:58  沉梦昂志_doc  阅读(163)  评论(0编辑  收藏  举报