1. 程式人生 > >藍橋杯基礎練習 字母圖形

藍橋杯基礎練習 字母圖形

題目描述

在這裡插入圖片描述

演算法設計

以樣例為例:n=5,m=7

構造輔助陣列A

設計一個長為m+n-1=11的如下陣列A:

下標 0 1 2 3 4 5 6 7 8 9 10
字元 E D C B A B C D E F G

設計方法是確定陣列A中字元A的位置Aindex=n-1=4,然後陣列A的 0 到 Aindex-1 位置的字元分別比字元A的ASCII碼大n-1、n-2······1;陣列A的 Aindex+1 到 m+n-2 位置的字元分別比字元A大1、2······m-1。

尋找規律

那麼輸出的5行字串的首末字元在陣列A中的位置如下(假設輸出的5行字串起始行行號為0):

行號 起始字元在陣列A中位置 末尾字元在陣列A中位置 輸出字串
0 4 10 ABCDEFG
1 3 9 BABCDEF
2 2 8 CBABCDE
3 1 9 DCBABCD
4 0 7 EDCBABC

假設陣列A中通過以上比較我們可以總結出行號為 ii 的輸出字串的首末字元在陣列A中位置分別為AindexiAindex-iAindexi+m1Aindex-i+m-1。掌握這樣的規律後就編寫演算法就很容易了。

C++程式碼

#include<bits/stdc++.h>
using namespace std;
int
main(){ int n,m; scanf("%d%d",&n,&m); char A[n+m-1];//定義陣列A int Aindex=n-1;//確定字元'A'的位置為n-1 for(int i=Aindex;i>=0;--i)//填充陣列A的0~Aindex-1位置的字元 A[i]=(char)('A'+Aindex-i); for(int i=Aindex;i<n+m-1;++i)//填充陣列A的Aindex+1~m+n-2位置的字元 A[i]=(char)('A'+i-Aindex); for
(int i=0;i<n;++i){//輸出n行字串 for(int j=0;j<m;++j) printf("%c",A[Aindex-i+j]); puts("");//換行 } return 0; }

Java程式碼

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int n=input.nextInt(),m=input.nextInt();
		char[] A=new char[n+m-1];//定義陣列A
	    int Aindex=n-1;//確定字元'A'的位置為n-1
	    for(int i=Aindex;i>=0;--i)//填充陣列A的0~Aindex-1位置的字元
	        A[i]=(char)('A'+Aindex-i);
	    for(int i=Aindex;i<n+m-1;++i)//填充陣列A的Aindex+1~m+n-2位置的字元
	        A[i]=(char)('A'+i-Aindex);
	    for(int i=0;i<n;++i){//輸出n行字串
	        for(int j=0;j<m;++j)
	            System.out.print(A[Aindex-i+j]);
	        System.out.println();//換行
	    }
	}
}