天天看點

1638圖形

  咕了這麼久……最近總算抽得出一點兒時間來寫篇部落格了。很久沒更,都不太知道該發些什麼了。想了好一會兒,終于決定,更一下我最近做過的一些比較難得題吧。(各位大佬們多多指教)

  以下是正文:

  

描述

貝貝最近玩起了字元遊戲,規則是這樣的:讀入四行字元串,其中的字母都是大寫的,樂樂想列印一個柱狀圖顯示每個大寫字母的頻率。你能幫助他嗎?

輸入

輸入檔案共有4行:每行為一串字元,不超過72個字元。

輸出

與樣例的格式保持嚴格一緻。

輸入樣例 1 

THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!      

輸出樣例 1

*
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

      

說明:

1.輸出的相鄰字元間有一個空格。

2.最後一行的26個大寫字母每次必須輸出。

3.大寫字母A所在的第一列前沒有空格。

  這一題我的思路很簡單,全部輸入,然後寫一個桶排。然後從桶排最高的字母開始,寫個循環挨個往下搜尋。隻要這個字母出現的次數大于循環i,就輸出。最後一行單獨輸出。

  代碼:

1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int s[26];
 4 int main()
 5 {
 6     int j,n,maxn=0;
 7     string a;
 8     for(int i=1;i<=4;i++)
 9     {
10         getline(cin,a);
11         n=a.size();
12         for(int j=0;j<n;j++)
13         {
14             if(a[j]>='A'&&a[j]<='Z') s[a[j]-'A']++;
15         }
16     }
17     for(int i=0;i<26;i++)maxn=max(maxn,s[i]);
18     for(int i=maxn;i>0;i--)
19     {
20         for(j=0;j<26;j++)
21         {
22             if(s[j]>=i&&s[j]!=25) cout<<"* ";
23             if(s[j]<i&&s[j]!=25) cout<<"  ";
24             if(a[i]>=i&&s[j]==25) cout<<"*";
25             if(a[i]<i&&s[j]==25) cout<<" ";
26         }
27         printf("\n");
28     }
29     for(int i=0;i<26;i++) printf("%c ",i+'A');      

PS:

  這一道題其實我磕了很久都沒做出來,原因嘛……大緻的思路都有,每個需要注意的點也都挨個兒檢查過了,但就是AC不了。最後上了一下洛谷,看了一篇大佬和我的思路比較相似的題解,才找出了我錯誤的那一個點。修改了幾次之後,我的代碼才終于AC了。說起來也是一段艱辛的故事。希望不會做這道題的朋友們不會像我這樣。

(疫情複發,注意身體健康)

繼續閱讀