洛谷-P1598- 垂直直方图

垂直柱状图 - 洛谷


解题思路:

1.利用while循环不断读入一个字符,然后创建一个num数组用下标来计算每个字母出现的次数

2.统计完次数之后,找到出现最多的字母次数,因为打印的行数取决于最大值

3.然后创建循环,从最大值开始遍历,枚举每一个字母的次数,如果该字母的次数大于等于i,则输出* 否则的话打印两个空格(当字母没有到达该次数的时候,要打印空格,腾出位置)

4.最后打印最后一行的字母


#include<bits/stdc++.h>
using namespace std;
int num[30];
int main()
{
	char ans;
	while(cin>>ans)//不断读入一个字符
	{
		if(ans>='A'&&ans<='Z')//如果是大写字母的话
		num[ans-'A']++;//桶排序计数
	}
	
	int max=0;//找到字母出现次数的最大值
	for(int i=0;i<=25;i++)
	if(num[i]>max)
	max=num[i];
	
	for(int i=max;i>=1;i--)//从最大值开始遍历
	{
		for(int j=0;j<=25;j++)//枚举每一个字符
		{
			if(num[j]>=i)//如果该字符出现的次数大于等于i
			cout<<"* ";//打印*和空格
			else
			cout<<"  ";//否则,打印两个空格
		}
		cout<<endl;//换行
	}
	
	for(int i=1;i<=26;i++)//输出最下方的一行字母
	{
		cout<<(char)(i+64)<<" ";
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值