• 1097 矩阵行平移(语文题,选做)


    在这里插入图片描述

    输入样例:

    7 2 99
    11 87 23 67 20 75 89
    37 94 27 91 63 50 11
    44 38 50 26 40 26 24
    73 85 63 28 62 18 68
    15 83 27 97 88 25 43
    23 78 98 20 30 81 99
    77 36 48 59 25 34 22

    输出样例:

    529 481 479 263 417 342 343

    样例解读

    需要平移的是第 1、3、5、7 行。给定 k=2,应该将这三列顺次整体向右平移 1、2、1、2 位(如果有更多行,就应该按照 1、2、1、2、1、2 …… 这个规律顺次向右平移),左端的空位用 99 来填充。平移后的矩阵变成:

    99 11 87 23 67 20 75
    37 94 27 91 63 50 11
    99 99 44 38 50 26 40
    73 85 63 28 62 18 68
    99 15 83 27 97 88 25
    23 78 98 20 30 81 99
    99 99 77 36 48 59 25

    solution

    所谓的“1、……、k、1、……、k、……”指的是在1,2,3 ……,k-1,k之间循环而非1,k, 1,k。测试点1, 2,3,6不过可能就是因为增长方式不对

    #include
    using namespace std;
    const int maxn = 110;
    int a[maxn][maxn], sum[maxn] = {0};
    int main(){
    	int n, k, x, flag = 1;
    	scanf("%d%d%d", &n, &k, &x);
    	for(int i = 1; i <= n; i++){
    		for(int j = 1; j <= n; j++){
    			scanf("%d", &a[i][j]);
    		}
    	}
    	for(int i = 1; i <= n; i++){
    		for(int j = n; j >= 1; j--){
    			if(i % 2 == 1){
    				if(j > flag) a[i][j] = a[i][j - flag];
    				else a[i][j] = x;
    			}
    		}
    		if(i % 2 == 1){
    			flag++;
    			if(flag % (k + 1) == 0) flag = 1;
    			else flag = flag % (k + 1);
    		}
    	}
    //	for(int i = 1; i <= n; i++){
    //		for(int j = 1; j <= n; j++){
    //			printf("%d ", a[i][j]);
    //		}
    //		printf("\n");
    //	}
    	for(int i = 1; i <= n; i++){
    		sum[i] = 0;
    		for(int j = 1; j <= n; j++){
    			sum[i] += a[j][i];
    		}
    		printf("%d", sum[i]);
    		if(i != n) printf(" ");
    	}
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    或者

    #include
    using namespace std;
    const int maxn = 110;
    int a[maxn][maxn], sum[maxn] = {0};
    int main(){
    	int n, k, x, flag = 1;
    	scanf("%d%d%d", &n, &k, &x);
    	for(int i = 1; i <= n; i++){
    		for(int j = 1; j <= n; j++){
    			scanf("%d", &a[i][j]);
    		}
    	}
    	for(int i = 1; i <= n; i++){
    		for(int j = n; j >= 1; j--){
    			if(i & 1){
    				if(j > flag) a[i][j] = a[i][j - flag];
    				else a[i][j] = x;
    			}
    		}
    		if(i & 1){
    			flag++;
    			if(flag % (k + 1) == 0) flag = 1;
    			else flag = flag % (k + 1);
    		}
    	}
    	for(int i = 1; i <= n; i++){
    		sum[i] = 0;
    		for(int j = 1; j <= n; j++){
    			sum[i] += a[j][i];
    		}
    		printf("%d", sum[i]);
    		if(i != n) printf(" ");
    	}
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    Yarn 总结(未完待续)
    Linux下的Swap内存
    C#与C++的交互PInvoke
    快速搭建云原生开发环境(k8s+pv+prometheus+grafana)
    oracle数据导出exp导入imp
    FFmpeg -r 放在 -i 前后的区别
    八数码问题
    Docker从入门到进阶之基础操作(3)—— 仓库(Repository)
    HTB——introduction to active directory
    零基础该如何学习Java,学习java完整学习路线
  • 原文地址:https://blog.csdn.net/Moliay/article/details/137964267