P1598 垂直柱状图

喜夏-厌秋 提交于 2020-02-06 02:51:29

P1598 垂直柱状图

题目描述

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入格式

四行字符,由大写字母组成,每行不超过100个字符

输出格式

由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

输入输出样例

输入 #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

说明/提示

每行输出后面不允许出现多余的空格。

C

#include<stdio.h>
int main()
{
	char a[101];
	int i,j,maxn=0,m=0,c[26]={0};
	for(i=0;i<4;i++){
		gets(a);
		for(j=0;a[j]!='\0';j++)
			if(a[j]<='Z'&&a[j]>='A')
				c[a[j]-'A']++;
	}
	for(i=0;i<26;i++)
		if(c[i]>maxn)
			maxn=c[i];
	while(maxn--){
		for(i=0;i<26;i++)//遍历找出本次循环的最大值
			if(c[m]<=c[i])
				m=i;
		for(i=0;i<26;i++)
			if(c[i]>maxn && i!=m){//因为while循环使maxn-1,比c[i]小
				c[i]--;
				printf("* ");
			}
			else if(c[i]>maxn && i==m){//本次循环最大值结束,进行下轮循环
				c[i]--;
				printf("*\n");
				break;
			}
			else
				printf("  ");
	}
	for(i=0;i<26;i++)
		printf("%c%c",i+'A',i==25?'\n':' ');
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!