poj 百鍊 2800:垂直直方圖
阿新 • • 發佈:2019-01-09
- 描述
- 輸入4行全部由大寫字母組成的文字,輸出一個垂直直方圖,給出每個字元出現的次數。注意:只用輸出字元的出現次數,不用輸出空白字元,數字或者標點符號的輸出次數。
- 輸入
- 輸入包括4行由大寫字母組成的文字,每行上字元的數目不超過80個。
- 輸出
- 輸出包括若干行。其中最後一行給出26個大寫英文字母,這些字母之間用空格隔開。前面的幾行包括空格和星號,每個字母出現幾次,就在這個字母的上方輸出一個星號。注意:輸出的第一行不能是空行。
- 樣例輸入
-
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
-
THIS IS AN EXAMPLE TO TEST FOR YOUR
-
HISTOGRAM PROGRAM.
-
HELLO!
- 樣例輸出
-
思路:這道題第一眼看上去輸入還好,就是輸出,讓人費解,這要怎麼輸出。其實很簡單。先用一個數組num[26]記錄每個字母出現的次數,然後比較大小求出現最多的次數。把這個最多次數當成接下來要輸出圖案的行數,然後迴圈並判斷這一行每個字母輸出*和一個空格或者兩個空格,每輸出一行,最大的次數都要減一,以進行下一行的判斷輸出。
-
需要注意字元陣列要開得大一點。
-
c語言程式碼:
-
#include<stdio.h>
#include <string.h>
int main()
{
int num[26];
int i,j;
char str[20000];
for(i=0;i<26;i++)
num[i]=0;
for (i=0;i<4;i++)
{
gets(str);
int len = strlen(str);
for (j=0;j<len;j++)
{
if (str[j]>='A'&&str[j]<='Z')
{
num[str[j]-'A']++;//記錄每個字母出現的次數
}
}
}
int max = 0;
for (i=0;i<26;i++)
if (num[i]>max)
max = num[i];//求出出現最多的次數
for (i=max;i>0;i--)//以出現最多的次數為行數的迴圈
{
for (j=0;j<26;j++)//每行26個字母迴圈判斷輸出
{
if (num[j]>=i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
printf("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\n");
return 0;
}