UVa 488 - Triangle Wave

( Tip: 點擊左上方的三橫槓選單按鈕,可以收起左側 Pdf 頁。)

Step 1. 題目概要

根據題目所指定的Amplitude(震幅)以及Frequency(頻率)去生成正確的三角波(triangular wave)

  • 先輸入一個T,表示測資總數
  • 每筆測資會需要輸入一對數字Amplitude(震幅),Frequency(頻率)
  • 依照輸入的震幅與頻率去產生波(waves)
  • 輸出的每筆測資間要空一行

Step 2. 解題思路

  • 利用巢狀迴圈及留意空白行以完成解題
  • 首先根據給定的num和times參數來生成圖案。
  • 在solve函數中,使用嵌套的迴圈來生成圖案。外層迴圈i從1遞增到times,表示要生成圖案的次數。
    • 內層迴圈1用於生成上半部分的圖案,它從j等於1遞增到num,然後再使用第三層迴圈k從1遞增到j,在每次迴圈中輸出j。
    • 內層迴圈2用於生成下半部分的圖案,它從j等於num-1遞減到1,然後再使用第三層迴圈k從1遞增到j,在每次迴圈中輸出j。在每次迴圈後,如果i小於times,則輸出一個空行。
  • 在main函數中,首先讀取整數T,表示測試案例的數量。接著使用一個while迴圈處理每個測試案例。在每個測試案例中,讀取整數num和times,並呼叫solve函數來生成圖案。最後,如果還有更多測試案例,則輸出一個空行。

Step 3. 範例輸入與輸出 - Sample Input and Output

Step 4. 參考程式碼 - Accepted Code

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
#include <bits/stdc++.h>
using namespace std;

void solve(const int &num, const int &times) {
for(int i=1; i<=times; i++) {
for(int j=1; j<=num; j++) {
for(int k=1; k<=j; k++) cout<<j;
cout<<"\n";
}
for(int j=num-1; j>0; j--) {
for(int k=1; k<=j; k++) cout<<j;
cout<<"\n";
}
if(i<times) cout<<"\n";
}
}

int main() {
ios::sync_with_stdio(0);
cin.tie(0);

int T;
cin>>T;
while(T--) {
int num,times;
cin>>num>>times;
solve(num,times);
if(T) cout<<"\n";
}
return 0;
}