CSU2020期中测试模拟题1 问题D:虚空之力

问题D:虚空之力

问题描述

樱满集注射了第二支虚空基因组,重新夺回了王之力,而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(void){
	int min(int a,int b);//声明min函数,便于比较大小
	int t,k=0,i=0,n=0,g=0,x,y;
	char a;
	while(~scanf("%d",&t)){
		getchar();//吞掉回车键
		while(t--){
		scanf("%c",&a);
		if(a=='k') k++;
		else if(a=='i') i++;
		else if(a=='n') n++;
		else if(a=='g') g++;//只分别记录k,i,n,g的数量
	   }
	x=min(k,i);  x=min(x,n);  x=min(x,g);
	k-=x;  i-=x; n-=x;  g-=x;//先寻找k,i,n,g中最小的那个
	if(i==0||n==0||g==0) printf("%d\n",x);//只要i,n,g中有一个是最小即此时为0的时候,说明最多能献上这么多的礼炮
	else if(k==0){
	y=min(i,n);y=min(y,g);y=min(k+x,y);
	printf("%d\n",y+x);	
	}
/*如果i,n,g都不为0而且k为0的话,则容易想出还能由一个k与两个i,n,g组成两个礼炮,而取最小值是由于此时i,n,g可能率先为0,也有可能是k不能全部用来组成两个礼炮*/
	k=0;i=0;n=0;g=0;//防止上一轮的数据对下一轮造成影响
}
	return 0;
}
int min(int a,int b){
	if(a>b) return b;
	else return a;
}//定义使用到的min函数

AC代码如上(如有错误,欢迎指正)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值