計算機概論|HW13

題目敘述

請實作一程式,此程式可以不斷地要求使用者輸入兩整數o(1<=o<=26)、n(n>0),直到所輸入的o或n值不在指定範圍內時結束程式。當給定一組o及n時,請輸出一(2*n-1)X(2*n-1)的同心矩形,每一層矩形符號由一個英文字母表示,最內層為以A表示的同心矩形,接下來為以B、C、D依序表示的同心矩形,直到LO (LO代表從A開始依字母順序的第O個字母,其中A為第1個字母),之後再從A開始,週而復始直到組成一(2*N-1)X(2*N-1)的同心矩形。範例如下所示。

範例輸入

 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
o = 2, n = 5
AAAAAAAAA  
ABBBBBBBA  
ABAAAAABA  
ABABBBABA  
ABABABABA  
ABABBBABA  
ABAAAAABA  
ABBBBBBBA  
AAAAAAAAA  

o = 5, n = 4
DDDDDDD  
DCCCCCD  
DCBBBCD  
DCBABCD  
DCBBBCD  
DCCCCCD  
DDDDDDD  

o = 3, n = 7
AAAAAAAAAAAAA  
ACCCCCCCCCCCA  
ACBBBBBBBBBCA  
ACBAAAAAAABCA  
ACBACCCCCABCA  
ACBACBBBCABCA  
ACBACBABCABCA  
ACBACBBBCABCA  
ACBACCCCCABCA  
ACBAAAAAAABCA  
ACBBBBBBBBBCA  
ACCCCCCCCCCCA  
AAAAAAAAAAAAA  

答題思路

參考答案

 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
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int n ;
    
    while(cin >> n and n > 0) {
        for(int i=0; i < 2*n-1; i++) {
            int idx = i;
            
            if(i < n)
                idx -= (i-n+1)*2;
            
            for(int j=0; j < 2*n-1; j++) {
                int jdx = j;
                if(j < n)
                    jdx -= (j-n+1)*2;
                
                printf("%d", min(idx, jdx)-n+2);
            }
            printf("\n");
        }
    }

    return 0;
}
最後更新 Dec 07, 2022 12:00 +0800