本文主要是介绍[2018 NUIST 程序设计竞赛] A. 竹鼠的命运,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[2018 NUIST 程序设计竞赛]
A. 竹鼠的命运
原题:
题目描述
农华兄弟最近开始做直播,竹鼠们开始瑟瑟发抖,但它们除了吃和睡,其它什么都做不了。农华兄弟突发奇想,如果某只竹鼠最多一次连续吃东西的时间超过最多一次连续睡觉的时间,那么它就会被做成宽油竹鼠(宽油:使用很大量的油的烹饪方法);如果次数相等则会被做成叫花竹鼠(叫花:用粘土把食材包裹起来,加以烧烤的烹饪方法);如果其最多一次连续吃东西的时间少于最多一次连续睡觉的时间,它就会被做成烧烤竹鼠。现在请你帮农华兄弟决定竹鼠们的命运。
输入描述
题目包含多组测试数据。第一行包括一个正整数 T,代表测试数据的组数(竹鼠的数量)。
接下来的 T 行,每行包含一个数字序列,代表一只竹鼠的行为。第一个数字 n 表示竹鼠吃和睡的总时间(1 ≤ n ≤ 100)。数字序列由 1 和 2 组成。1 代表竹鼠吃了一段时间的东西,2 代表竹鼠睡了一段时间的觉。每个数字表示的吃或睡的时间长度相等。
输出描述
对于每一组测试数据,输出一行字符序列。“kuanyou” 表示竹鼠被做成了宽油竹鼠;“jiaohua” 表示做成了叫花竹鼠;“bbq” 表示做成了烧烤竹鼠。
样例输入
1
8 2 2 1 1 2 1 1 1
样例输出
kuanyou
样例解析
由于竹鼠最多一次连续吃东西的时间为 3 (“1 1 1”),最多一次连续睡觉的时间为 2 (“2 2”),所以它会被做成宽油竹鼠。
这题就是找给定数组中连续的1的最大长度和连续的2的最大长度,比较后按要求输出就可以了
代码+注释如下:
#include <iostream>
using namespace std;
int a[1000];//a数组保存竹鼠的行为,即1或2 int main()
{ int n,m,tsleep,teat,maxsleep,maxeat;/*tsleep:暂存睡眠时间,teat:暂存吃东西的间,maxsleep:最长连续睡眠时间,maxeat:最长吃东西时间*/ cin>>n; for(int i=0;i<n;i++) //多组输入 {cin>>m; //m:竹鼠行为个数 for(int j=0;j<m;j++)cin>>a[j];tsleep=0;//初始化为0 teat=0;maxsleep=-1;//保证足够小 maxeat=-1;for(int j=0;j<m;j++)//遍历数组,求maxeat和maxsleep {if(a[j]==1) {teat++; if((j+1<m&&a[j+1]==2)||j+1==m) /*当下一个数存在且是2,或者到了数组的最后一个元素时,比较teat和*/ { if(teat>maxeat) //maxeat,保留较大的maxeat=teat;teat=0; //重置teat }}if(a[j]==2) {tsleep++; if((j+1<m&&a[j+1]==1)||j+1==m){if(tsleep>maxsleep)maxsleep=tsleep;tsleep=0; }}}while(1){cout<<"别把bbq打成rbq!!!"<<endl;/*这个死循环是为了防止抄袭的(虽然可能没人会抄我这个辣鸡的code就是了......)*/}if(maxeat>maxsleep) //根据情况按题目要求输出 cout<<"kuanyou"<<endl;else if(maxeat==maxsleep)cout<<"jiaohua"<<endl;elsecout<<"bbq"<<endl;}return 0;
}
Tips:说一下&&运算符,当左右两边都为真时,结果才为真,而且它是先算左边,如果左边为假,就不会去计算右边了,因此,在
if((j+1<m&&a[j+1]==2)||j+1==m)
里面,不用担心a[i+1]越界
这篇关于[2018 NUIST 程序设计竞赛] A. 竹鼠的命运的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!