矩阵输出 1523 山东理工OJ

对你有帮助就点个赞吧,谢谢各位

先赞后看  养成习惯

关注公众号:不会编程的程序圆   看更多干货

 

[每日一道算法题(C)]

山东理工OJ 2019级程序设计基础 l (2019秋季) 题目编号:1523

矩阵输出

Problem Description

输入n个整数,输出由这些整数组成的n行矩阵。

Input

第一行输入一个正整数N(N <= 20),表示后面要输入的整数个数。
下面依次输入N个整数。

Output

以输入的整数为基础,输出有规律的n行数据。

Sample Input

5
3 6 2 5 8

Sample Output

3 6 2 5 8
8 3 6 2 5
5 8 3 6 2
2 5 8 3 6
6 2 5 8 3


1.观察规律
2.思路

对于这N个序列来说,每次的变化只是将最后一个数放到序列的第一位。
1.我们可以用临时变量存储最后一个数的值
2.然后让数组从 倒数第二个数 开始到 数组首位 结束 依次“向后移动一位”,也就是 a[N - 2] = a[N - 1]
3.最后将临时变量所存储的数组最后一位元素的值 赋给 数组 首元素

分析到这里其实这道题已经可以完成了,但是如果我只想要这个输出的矩阵的某一行呢?
其实这个问题用上面的思路也是可以做的,就是需要多循环几次。如果我想一步就得到这个数组呢?

我们用 N = 5 来举例
观察题干中的输出样例,第一行是没有改变的,一共是 5 行
1.我们可以创建一个和原数组同样大小的临时数组,将原来的数组分成两部分。
2.第一部分是从 要放到数组首位的元素位置 到 数组最后一个元素
3.第二部分是从 数组首元素开始 到 要放到数组首位的元素前一位


#include<stdio.h>

void matrix(int* arr, int n);//上题的解法看这个函数
void matrix_any(int* arr, int N, int n);//得到你想要的顺序哪一行看这里

int main() {

    int N = 0;
    int i = 0;

    scanf("%d", &N);

    int* arr = (int*)malloc(sizeof(int) * N);

    for (i = 0; i < N; i++)
        scanf("%d", &arr[i]);

    matrix(arr, N);//这种方法更加高效

    printf("\nwant one row only: input a row\n");
    int n = 0;
    scanf("%d", &n);
    matrix_any(arr, N, n);

    free(arr);
    return 0;
}

void matrix(int* arr, int n) {

    int i, j, k;
    int* tmp = (int*)malloc(sizeof(int) * n);//创建临时数组,保证不改变arr数组的原始顺序

    for (i = 0; i < n; i++)
        tmp[i] = arr[i];

    for (i = 0; i < n; i++) {
        if(i != 0){
            k = tmp[n - 1];//放到首位的数
            for (j = n - 2; j >= 0; j--) {
                tmp[j + 1] = tmp[j];
            }
            tmp[0] = k;
        }
        for (j = 0; j < n; j++)
            printf("%d ", tmp[j]);
        printf("\n");
    }
}

void matrix_any(int* arr, int N, int n) {

    int i, j, k;
    int* tmp = (int*)malloc(sizeof(int) * N);

    for (j = N - n + 1, k = 0; j < N; j++, k++)
        tmp[k] = arr[j];

    for (j = 0; N - k > 0; j++, k++)
        tmp[k] = arr[j];

    for (k = 0; k < N; k++)
        printf("%d ", tmp[k]);
    printf("\n");

    free(tmp);
}

*** 

 关注我的公众号,看更多算法题:

发布了46 篇原创文章 · 获赞 185 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44954010/article/details/104122941