信息学奥赛一本通 1028:字符菱形 | OpenJudge NOI 1.1 09
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1028:字符菱形 | OpenJudge NOI 1.1 09
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1028:字符菱形
OpenJudge NOI 1.1 09:字符菱形
【題目考點】
1. 輸入輸出字符
2. (擴展)循環
【解體思路】(擴展)
問題:輸出對角線長度為n的菱形圖案(n>=3且n為奇數)
思路:
該菱形共有n行,假設這n行編號為0 ~ n-1
將這n行分為三部分:前半段,中間元素,后半段
由于n是奇數,將/視為整除運算的話,有(n-1)/2 等于 n/2
前半段共有n/2個元素,編號為0 ~ n/2-1
中間元素的編號為:n/2
后半段共有n/2個元素,編號為 n/2+1 ~ n-1
觀察規律可知,第i行前面空格數,為該行行號與中間行行號的差值的絕對值,即|i - n/2|
第i行的字符個數,為最大長度n減去前面空格數的2倍,即n - 2 * |i - n/2|
【題解代碼】
解法1:使用cin,cout進行輸入輸出
#include <bits/stdc++.h> using namespace std; int main() {char a;cin>>a;cout<<" "<<a<<endl;cout<<" "<<a<<a<<a<<endl;cout<<a<<a<<a<<a<<a<<endl;cout<<" "<<a<<a<<a<<endl;cout<<" "<<a<<endl;return 0; }解法2:使用scanf,printf進行輸入輸出
#include <bits/stdc++.h> using namespace std; int main() {char a;scanf("%c", &a);printf(" %c\n", a);printf(" %c%c%c\n", a, a, a);printf("%c%c%c%c%c\n", a, a, a, a, a);printf(" %c%c%c\n", a, a, a);printf(" %c\n", a);return 0; }解法3:(擴展)輸出對角線長度為n的菱形圖案(n>=3且n為奇數)
#include <bits/stdc++.h> using namespace std; int main() {char c;cin>>c;int n = 5;//菱形對角線長度。若要輸出任意對角線長度的菱形,則輸入該變量。 for(int i = 0; i < n; ++i)//一共有n行{int sn = abs(i - n / 2);//該行前面空格數int en = n - 2 * sn;//該行字符個數 for(int j = 0; j < sn; ++j)cout<<' ';for(int j = 0; j < en; ++j)cout<<c;cout<<endl; }return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1028:字符菱形 | OpenJudge NOI 1.1 09的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1175:除以13)
- 下一篇: 信息学奥赛一本通(2037:【例5.4】