虚空之力(C语言)

oj题解之虚空之力


题目描述

樱满集注射了第二支虚空基因组,重新夺回了王之力,而hx073269则想为王的诞生献上礼炮! 有一串长度为n的小写字母组成的字符串,hx073269可以从中挑选‘k’ ‘i’ ‘n’ ‘g’四个字符组成一支礼炮,或者从中挑选‘k’ ‘i’ ‘n’ ‘g’ ‘i’ ‘n’ ‘g’七个字符组成两支礼炮。请问hx073269为王的诞生最多能献上多少礼炮?

输入

第一行一个正整数n,表示字符串长度,n<=10^7。
第二行一串只含有小写字母的字符串。

输出

输出hx073269为王的诞生能献上的最多礼炮数

样例输入输出

样例输入
4
king

样例输出
1

代码如下(示例):

#include<stdio.h>
int main()
{
    int x,n,a=0,b=0,c=0,d=0,e;//老二次元了
    //说实在话罪恶王冠挺好看的
    scanf("%d",&n);
    char l;int i;
    for(i=0;i<=n;i++)
    {
        scanf("%c",&l);
        if(l=='k')  a+=1;//记录k,i,n,g的个数
        if(l=='i')  b+=1;
        if(l=='n')  c+=1;
        if(l=='g')  d+=1;
    }
    if(b<=c&&b<=d)e=b;
    if(c<=d&&c<=b)e=c;//选取i,n,g里的最小值
    if(d<=b&&d<=c)e=d;
    if(e%2==0)
    {//如果这个最小值能被2整除,判断与a的关系确定礼炮数
        if(e/2<=a)   x=e;//没有a的两倍,放king效率高
        if(e/2>a)    x=2*a;//大于或等于a的两倍,放kingking效率高
        
    }
    if(e%2==1)
    {//若这个最小值是个奇数,先给它补一个字母(最小值所对应)
      // 如果除以2比k字符数量小,则放礼炮king占比更大,有a个king
      // 如果除以2比k字符数量多,则放礼炮kinging占比更大,有2a个
        if((e+1)/2<=a)  x=e;
        if((e+1)/2>a)   x=2*a;
    
    }
    printf("%d",x);
    return 0;
}

ps

思路在代码中以注释形式标出。 代码仅供参考,不得作于商业用途,侵权必究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值