【蓝桥杯】 次数差:x 星球有 26 只球队,分别用 a ~ z 的 26 个字母代表。他们总是不停地比赛。 在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。 国王...

题目描述

题目传送门 >> 次数差

【问题描述】
x 星球有 26 只球队,分别用 a ~ z 的 26 个字母代表。他们总是不停地比赛。

在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。

国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)

【输入描述】
输入,一个串,表示球队获胜情况(保证串的长度 < 1000)。

【输出描述】
要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。

【输入输出样例】
示例1
输入:

 abaabcaa

输出:

 4

【运行限制】
• 最大运行时间:1s
• 最大运行内存: 256M


解题代码

C语言

法一

【解题思路】:用数组count记录a~z出现的次数(eg.count[0]为字母a出现的次数)。

#include <stdio.h>
#include <string.h>
int main()
{
  int len,i,j,max=1,min=1000;
  int count[26]={0};
  char str[1000];
  gets(str);
  // 获取输入的字符串str的长度
  len=strlen(str);
  // 用count记录a~z出现的次数
  for(i=0; i<len; i++){
	++count[str[i] - 97];
  }
  // 寻找最大值与最小值
  for(j=0;j<26;j++){
	  if(count[j]>max){
		  max = count[j];
	  }
	  if(count[j]!=0 && count[j]<min){
		  min = count[j];
	  }	  
  }
  printf("%d",max-min);
  return 0;
}

法二

【解题思路】逐个判断输入的字符串中,每一个字符在字符串中的出现个数,记录最大值与最小值

#include <stdio.h>
#include <string.h>
int main()
{
  int len,i,j,k,max=1,min=1000;
  char a[1000];
  gets(a);
  len=strlen(a);
  for(i=0; i<len; i++)
  {
    k=0; //重置字符出现的次数
    for(j=0; j<len; j++)
    {
      if(a[j]==a[i])
      {
        k++;
      }
    }
    if(k>max)
    {
      max=k;
    }
    if(k<min && k!=0)
    {
      min=k;
    }
  }
  printf("%d",max-min);
  return 0;
}

测试用例

测试1
输入:

 abcbbcas

输出:

 2

测试2
输入:

 abbccbcacd

输出:

 3
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值