• 1097 矩阵行平移


    给定一个 n×n 的整数矩阵。对任一给定的正整数 k

    输入格式:

    输入第一行给出 3 个正整数:n(<100)、k(

    接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

    输出格式:

    在一行中输出平移后第 1 到 n 列元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

    输入样例:

    1. 7 2 99
    2. 11 87 23 67 20 75 89
    3. 37 94 27 91 63 50 11
    4. 44 38 50 26 40 26 24
    5. 73 85 63 28 62 18 68
    6. 15 83 27 97 88 25 43
    7. 23 78 98 20 30 81 99
    8. 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 来填充。平移后的矩阵变成:

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

    C:

    1. #include
    2. int main() {
    3. int n, k, x, cnt = 1, Sum[100], A[100][100];
    4. scanf("%d %d %d", &n, &k, &x);
    5. for (int i = 0; i < n; i++) {
    6. for (int j = 0; j < n; j++) {
    7. scanf("%d", &A[i][j]);
    8. if (i & 1) {
    9. Sum[j] += A[i][j];
    10. }
    11. }
    12. }
    13. for (int i = 0; i < n; i += 2) {
    14. for (int j = 0; j < cnt; j++) {
    15. Sum[j] += x;
    16. }
    17. for (int j = cnt; j < n; j++) {
    18. Sum[j] += A[i][j - cnt];
    19. }
    20. cnt = cnt % k + 1;
    21. }
    22. for (int i = 0; i < n; i++) {
    23. if (i) {
    24. printf(" ");
    25. }
    26. printf("%d", Sum[i]);
    27. }
    28. return 0;
    29. }

    C++:

    1. #include
    2. using namespace std;
    3. int n, k, x, cnt = 1, Sum[100], A[100][100];
    4. int main() {
    5. cin >> n >> k >> x;
    6. for (int i = 0; i < n; i++) {
    7. for (int j = 0; j < n; j++) {
    8. cin >> A[i][j];
    9. if (i & 1) Sum[j] += A[i][j];
    10. }
    11. }
    12. for (int i = 0; i < n; i += 2) {
    13. for (int j = 0; j < cnt; j++) Sum[j] += x;
    14. for (int j = cnt; j < n; j++) Sum[j] += A[i][j-cnt];
    15. cnt = cnt % k + 1;
    16. }
    17. for (int i = 0; i < n; i++) {
    18. if (i) cout << ' ';
    19. cout << Sum[i];
    20. }
    21. return 0;
    22. }

    Java:

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. int n = scanner.nextInt();
    6. int k = scanner.nextInt();
    7. int x = scanner.nextInt();
    8. int cnt = 1;
    9. int[] Sum = new int[100];
    10. int[][] A = new int[100][100];
    11. for (int i = 0; i < n; i++) {
    12. for (int j = 0; j < n; j++) {
    13. A[i][j] = scanner.nextInt();
    14. if ((i & 1) == 1) {
    15. Sum[j] += A[i][j];
    16. }
    17. }
    18. }
    19. for (int i = 0; i < n; i += 2) {
    20. for (int j = 0; j < cnt; j++) {
    21. Sum[j] += x;
    22. }
    23. for (int j = cnt; j < n; j++) {
    24. Sum[j] += A[i][j - cnt];
    25. }
    26. cnt = (cnt % k) + 1;
    27. }
    28. for (int i = 0; i < n; i++) {
    29. if (i > 0) {
    30. System.out.print(" ");
    31. }
    32. System.out.print(Sum[i]);
    33. }
    34. }
    35. }

    Python:

    1. n, k, x = map(int, input().split())
    2. cnt = 1
    3. Sum = [0] * 100
    4. A = [[0] * 100 for _ in range(100)]
    5. for i in range(n):
    6. row = list(map(int, input().split()))
    7. for j in range(n):
    8. A[i][j] = row[j]
    9. if i % 2 == 1:
    10. Sum[j] += row[j]
    11. for i in range(0, n, 2):
    12. for j in range(cnt):
    13. Sum[j] += x
    14. for j in range(cnt, n):
    15. Sum[j] += A[i][j - cnt]
    16. cnt = (cnt % k) + 1
    17. for i in range(n):
    18. if i > 0:
    19. print(" ", end="")
    20. print(Sum[i], end="")

  • 相关阅读:
    【Langchain Agent研究】SalesGPT项目介绍(四)
    linux 增加交换区
    每天一道算法题(五)——判断一组数字是否连续,出现连续数字的时候以‘-’输出
    面向石油和天然气的计算机视觉和深度学习1
    Go之map详解
    【660-线性代数】补充秩为1的方阵性质 & 矩阵练习
    上周热点回顾(10.31-11.6)
    大数据:HDFS的Shell常用命令操作
    禁忌搜索算法TS求解连续函数最值
    BERT为何无法彻底干掉BM25??
  • 原文地址:https://blog.csdn.net/CY_hhxx/article/details/133253339