洛谷 P1598 垂直柱状图

题目描述

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

输入格式

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

输出格式

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

思路

简单的字符串+模拟。(不过还是有傻子不看题debug了好久

1.“在任何一行末尾不要打印不需要的多余空格” 意思是打印完每一行最后一个星号后直接换行。我的思路是,对数组进行两次遍历。第一次遍历统计该行中应出现的星号数sum,第二次遍历当已打印的星号数==sum时跳出循环,进行换行

2.注意输出样例的空格。。输出样例中每一列之间都用空格隔开。。

代码

#include<stdio.h>
#include<string.h>
int main()
{   
    int a[26]={0};
    char tem[105];
    for(int i=0;i<4;i++){
    	gets(tem);
    	for(int j=0;j<strlen(tem);j++){
    		if(tem[j]>='A'&&tem[j]<='Z') a[tem[j]-'A']++;
		}
	}
	int max=0;
	for(int i=0;i<26;i++){
		max=max>a[i]?max:a[i];
	}
	int max1=max;
	for(int i=0;i<max;i++){
		int cnt=0;
		for(int j=0;j<26;j++){
			if(a[j]>=max1) cnt++;
		}
		int cnt1=0;
		for(int j=0;j<26;j++){
			if(cnt1==cnt) break;
			if(a[j]>=max1){
				printf("* ");
				cnt1++;
			}else{
				printf("  ");
			}
		}
		printf("\n");
		max1--;
	}
	for(int i=0;i<26;i++){
		printf("%c",'A'+i);
		if(i==25) printf("\n"); else printf(" ");
	}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值