藍橋杯真題訓練 第六屆A組第四題 列印菱形

2021-10-22 12:23:38 字數 1924 閱讀 1537

第四題 程式填空題

一、解題過程

首先,先看了**,理解了是分為上下兩部分進行列印,然後先列印出對稱軸,再在對稱州的基礎上進行修改,接著就開始找規律,一開始以為字串可以做減法,但是後面將**打入elipse時,發現不能做減法,必須要用加法,這是才想到要在原字串上進行擷取操作,然後就分析了字串,發現每次迴圈新的s字串是按照一定規律擷取原字串來獲得的,然後就找到了規律是n-i的長度;接著就去找api發現string類有擷取字串的方法substring(start,end),就嘗試按照第一次找到的規律在elipse進行編譯,後面發現當輸出邊長為4是的正確的,而且輸出變成為8時是錯誤的,因此又繼續分析變成不同時輸出的規律,最後找到應該擷取的是(0,2*n-4-i)的長度,最後再試多幾個邊長不同的稜形都成功了,可是,再查答案後,發現答案

s.

substring(0

, s.

length()-3)

二、心得①以後看到這種型別的題,先自己手動草稿紙演算一邊**過程,明白其思想與演算法。

②明白演算法與思想之後,去分析應該要填什麼,有思路之後,就把**打到elipse,然後把自己第一次的想法輸入,看能否實現,若不能實現則繼續找規律分析

③**填空時,要多用到該**用到資料型別的api方法,比如用到了了vector,那麼就想想是否與size有關,用到了字串,那麼就相信是否與length有關,就是說最後的答案要盡可能用到自帶的api方法。

就好像這次題目,當初自己找規律時,發現的是n與i直接的關係,但是答案給的是length的關係,如果當初有這個意識,那麼肯定就會重點從字串的長度進行關係的查詢,因為這很容易可以看出,新得字串是原字串長度-3。所以要用多用原api操作方法的意識,集合大小和字串長度的意識。雖然當初自己找的規律也可以正確輸出,但是要和標準答案一致,誰知道到時會不會設定多個答案呢

三、解題思路

首先,明確何為題目中菱形的邊長,由圖可知,邊長n是指菱形共有2n-1行,上面n-1行和下面n-1行關於中間的一行對稱。上面n行中的第i行(i從0開始),開頭有n-1-i個空格,中間有2i-1個空格。上半部分開頭空格逐行遞減1個,中間空格逐行遞增2個,下半部分與上半部分對稱。以上為這個菱形的特點。

然後, 觀察已有**,不難推斷其思路:方法f中的第乙個for迴圈構造出對稱軸,即處於中心的這一行,看到最後輸出語句system.out.println(s1 + s2);可以推測該思路把菱形分割成兩部分,s1即上半部分,s2即下半部分。第二個for迴圈中,s1拼接新的一行s向上構造菱形,s2拼接新的一行s向下構造菱形,s初始時為中心這一行,顯然通過補充開頭的空格和末尾的x以及對舊行做改動來構造新行,不難得到,這個改動即把舊行截去末尾3個字元,這3個字元就是每行中間遞減的2個空格以及末尾的1個x(之後會在末尾補充乙個x)。

四、**

public

class

main

system.out.

println

(s1 + s2);}

public

static

void

main

(string[

] args)

}

藍橋杯 第六屆校賽A組第四題

今有7對數字 兩個1,兩個2,兩個3,兩個7,把它們排成一行。要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列 當然,如果把它倒過來,也是符合要求的。請你找出另一種符合要求的排列法,並且這個排列法是以74開頭的。注意 只填寫這個14...

第六屆決賽真題

在2行5列的格仔中填入1到10的數字。要求 相鄰的格仔中的數,右邊的大於左邊的,下邊的大於上邊的。如 圖1.png 所示的2種,就是合格的填法。請你計算一共有多少種可能的方案。1.暴力解決 include include using namespace std int a 10 10個數準備重排列 ...

第六屆藍橋杯個人省賽C語言A組第四題

stringingrid函式會在乙個指定大小的格仔中列印指定的字串。要求字串在水平 垂直兩個方向上都居中。如果字串太長,就截斷。如果不能恰好居中,可以稍稍偏左或者偏上一點。下面的程式實現這個邏輯,請填寫劃線部分缺少的 include include void stringingrid int wid...