杭电2074 叠框

坑挺多的,首先是n=1的情况要特殊考虑

其次是输出格式,气哭我了,它是要求除第一次外输入一行就换行,再输出,我一直是输出后再换行,很窒息

我的做法是确定中心,然后确定中间那行,根据中间那行向上、下递推

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<string>

using namespace std;

void main()
{
    int n;
    char a, b;
    char m[80][80];
    int i, j, count = 0;
    while (cin >> n >> b >> a)
    {
        if (count)cout << endl;
        if (n == 1)
        {
            cout << b << endl ;
            continue;
        }
        int c = n / 2;
        //确定最中间一行
        
        for (i = 0; i < n; i++)
        {
            if (i%2==c%2)
                m[c][i] = b;
            else m[c][i] = a;
        }
        //往上走,规律根据中间那行向上递推
        for (i = c-1; i >=0; i--)
            for (j = 0; j < n ; j++)
            {
                if (j > i&&j < n - i - 1)
                {
                    if (m[i +1][j] == a)
                        m[i][j] = b;
                    else m[i][j] = a;
                }
                else m[i][j] = m[i + 1][j];
            }
        m[0][0] = ' ';
        m[0][n - 1] = ' ';
        //向下遍历
        for (i = n / 2 + 1; i < n; i++)
            for (j = 0; j < n; j++)
                m[i][j] = m[n - i - 1][j];
        
        for (i = 0; i < n; i++){
            for (j = 0; j < n; j++)
            {
                cout << m[i][j];
            }
            cout << endl;
        }
        count++;
    }
    
}

猜你喜欢

转载自blog.csdn.net/KingsCC/article/details/81545560