2021-08-22贪心模拟试题总结

做一个考试的总结!

T1-面试

题目描述

知名跨国大公司蜗牛集团的的蜗牛老师要对求职者进行面试,面试总共分四轮,每轮的面试官都会对面试者的发挥进行评分。评分有 A B C D 四种。如果面试者在四轮中有一次发挥被评为 D,或者两次发挥被评为 C,就不会通过面试。如果面试者没有一次被评为 D,并且有三个或以上的 A,则会获得 special offer。其余情况会获得普通 offer。

现在告诉你一些面试者的发挥,请你算一算,他们的面试结果分别是什么。

输入格式

第一行输入一个 TT,代表面试者的个数。

接下来有 TT 行,每行都有一个长度为 44 的字符串,每个位置的字符分别代表面试者每一轮的发挥。

输出格式

输出 TT 行,分别表示 TT 个面试者的面试结果。如果面试失败,输出failed,如果面试通过,但不是 special offer,则输出offer,否则输出 sp offer

样例

输入样例1

2
AAAB
ADAA

输出样例1

sp offer
failed

分析

这道题的关键在于计算出每个人A,C,D三种成绩等级的个数,然后根据题意写判断语句即可

注意事项

1.千万不要忘记清空计数器

2.数组不要开小

3.判断条件要审清题意

主程序

int main()
{	
    string s;
	int n,a,c,d;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		int l=s.size();
		a=0;c=0;d=0;
		for(int i=0;i<l;i++)
		{
			if(s[i]=='A') a++;
			if(s[i]=='C') c++;
			if(s[i]=='D') d++;
		}
		if(d>0||c>=2) cout<<"failed"<<endl;
		else 
		{
			if(a>=3) cout<<"sp offer"<<endl;
		    else cout<<"offer"<<endl;
		}
	}
	return 0;
}

T2-Excel计数法

题目描述

知名跨国大公司蜗牛集团的的蜗牛老师 对 ExcelExcel 里面列的编号方式产生了兴趣:

ExcelExcel 的表格中,前 2626 列的编号为 A-ZA-Z,第 2727 列为AAAA,然后是AB, AC, ..., AZ, BA, ..., ZZ, AAA, ...AB, AC, ..., AZ, BA, ..., ZZ, AAA, ... 现在你需要写一个程序,计算某列在 Excel Excel 中的编号。

输入格式

一个正整数 nn ,表示第几列。

输出格式

一行,一个仅包含大写字母的字符串,表示该列在 ExcelExcel 中的编号。

样例

输入样例1

1

输出样例1

A

分析

这其实就是一个二十六进制转一进制的问题,只需要把输入的 n分别 /26 和 %26 做循环即可,还要知道数字和字母的转换方法,即-1+'A'.

注意事项

1.注意Z 不是0 ,是 26。如果发现末尾为 Z,那么下一次的n 要减1。

2.倒着输出 ans

主程序

while(n)
 {
    int x = n%26;
    n = n/26;
    if(x == 0) 
    {
        ans += 'Z';
        n--;
    }
    else ans += (x-1+'A');
 }
 

T3纸牌游戏

题目描述

知名跨国大公司蜗牛集团的员工们在一起玩纸牌游戏,规则如下:

总共有 nn 个人,每个人初始有 nn 张牌。每一轮从第一个人开始轮流操作,第 ii 个人每次操作必须选择 min(people−1, ai)min(people−1, ai) 个不同的人,分别从他们手中拿走一张牌给自己。 其中 peoplepeople 为游戏现存人数,手上没有牌的人立即被淘汰出局。

大家希望有尽可能多的人出局,游戏无限的进行下去,问最终游戏中最少还有几个人没有出局。

注意:不能从自己手中拿牌。

输入格式

第一行输入一个数字 nn ,代表游戏的总人数。接下来输入 nn 个数字,分别代表 aiai 。

输出格式

输出一行一个整数表示游戏最终最少剩几个人。

样例

输入样例1

2
1 2

输出样例1

2

样例解释1

两个人只能互相拿对方一张牌给自己,游戏永远进行下去。

分析

是一个贪心,贪心策略:尽量拿少的那个人的牌。

结论: 在现存 n个人的情况下, 对于第 i个人,如果 a[i]<n-1,那么 第 i个人必然会被淘汰出局,反之则永远不会被淘汰出局。所以当第i 个人不会出局时,第i+1到第n个人也不会被淘汰。

注意事项

1.算人数时别忘了加1

2.找到答案后 break;

主程序

sort(a+1, a+n+1);
for(int i=1; i<=n; ++i)
{ 
   if(a[i]>=n-i) 
  { 
   ans = n-i+1; 
   break;
  }
}

   先到这里吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值