sdut1523 矩阵输出

一句话题解:线性表元素移位循环输出,注意卡空格和回车(详细题解请查看全文)

原题地址在这里


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

题倒是不难,卡输出格式很恶心。

PE了三次后才算过。思路就是线性表的元素移动,先腾个地方再挨个挪,由于数据量非常小所以没问题。第一次的时候我是这样写的:

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i <= n; i++)
        cout << a[i] << " ";
    cout << endl;
    for (int i = 1; i <= n - 1; i++)
        change();
    //system("pause");
    return 0;
}

系统提示PE,感觉应该是多打了一个回车。我后来尝试修改了change函数,再次交上去还是PE。

后来我发现,这样写还会导致行末多出一个空格,仔细观察样例发现并没有行末空格,于是我又改成了这样:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <string>
#define maxn 233
using namespace std;
int n;
int a[maxn];

void change(int i) {
    int lst = a[n];
    for (int i = n - 1; i >= 1; i--)
        a[i + 1] = a[i];
    a[1] = lst;
    for (int i = 1; i <= n; i++) {
        cout << a[i];
        if (i != n)
            cout << " ";
    }
    if (i != n-1)
        cout << endl;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i <= n; i++) {
        cout << a[i];
        if (i != n)
            cout << " ";
    }

    if (n != 1)
        cout << endl;
    for (int i = 1; i <= n - 1; i++)
        change(i);
    system("pause");
    return 0;
}

/***************************************************
User name: ShawnZhou
Result: Accepted
Take time: 0ms
Take Memory: 744KB
Submit time: 2018-10-20 13:19:24
****************************************************/

这样就没问题了。

现在我还卡着一个PE的题,真令人头大。


-------------本文结束,感谢您的阅读转载请注明原作者及出处-------------

知识无价,码字不易。对您有用,敬请打赏。金额随意,感谢关心。