咕了這么久……最近總算抽得出一點兒時間來寫篇博客了,很久沒更,都不太知道該發些什么了,想了好一會兒,終于決定,更一下我最近做過的一些比較難得題吧,(各位大佬們多多指教)
以下是正文:
描述
貝貝最近玩起了字符游戲,規則是這樣的:讀入四行字串,其中的字母都是大寫的,樂樂想列印一個柱狀圖顯示每個大寫字母的頻率,你能幫助他嗎?
輸入
輸入檔案共有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了,說起來也是一段艱辛的故事,希望不會做這道題的朋友們不會像我這樣,
(疫情復發,注意身體健康)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285511.html
標籤:C++
上一篇:Windows 下 MSYS2 環境配置和 MinGW-w64 C++ 環境配置
下一篇:智能指標用法
