7-6 跳棋子

有两副跳棋可以玩,诺诺很高兴。某天,诺诺突然有点恼,把玩着的若干跳棋子扔到地上,跳棋子在地上活蹦乱跳,诺诺又高兴起来了,于是又把棋子捡起来。但有些棋子可能跳到很隐蔽的角落,捡不回来了。这样的事情以后经常发生,于是数棋子就成为家常便饭。我们知道,每副跳棋都有6种颜色的棋子,每种颜色都有10颗棋子。设诺诺有n副完全相同的跳棋(每副棋的6种颜色都一样,设为红、绿、蓝、黑、白、黄,计算输出棋子数、捡棋子、扔棋子都按这个颜色顺序),请你编程计算各种颜色的棋子在诺诺情绪变化之间还各有几颗(至少0颗,至多n*10颗,否则就是出现了错误的输入行)。一开始每副棋子都是完整的。

**在过程中,若出现错误的输入行,必须忽略该行输入并输出"impossible"**(参看输出样例)。

输入格式:

输入数据的第一行为一个正整数T,表示测试数据的组数。然后输入T组测试数据,每组测试先输入1个整数n(1<n<=10),表示一开始有n副完整的跳棋;然后是若干行输入,每行先输入一个英单词S,取值为"happy"、"angry"、"finish"、"count"之一;"happy"则表示捡回棋子,"angry"则表示扔掉棋子,"finish"则表示本组测试结束,"count"则表示计算并输出各种颜色的棋子数;若S为"happy"或"angry",则在1个空格之后在同一行上输入6个整数,分别表示对应的颜色可能的捡回或扔掉的棋子数,之间也以1个空格间隔(参看输入样例)。

输出格式:

对于每组测试,对于每个输入的S,如果S为"count"则按描述中的颜色顺序输出各色棋子的数量;如果S为"happy"或"angry",而且出现了错误的输入行则输出"impossible"(同时必须忽略该行输入)。

输入样例:

代码不一定是最短的但绝对是最好理解的一步步下来随便做

1
2
angry 1 2 3 4 5 6
count
happy 0 2 3 4 5 6
count
happy 1 2 3 4 5 6
angry 1 2 3 4 5 6
count
finish

输出样例:

19 18 17 16 15 14
19 20 20 20 20 20
impossible
18 18 17 16 15 14

提示:

样例输出的第3行的“impossible”是由于样例输入的第7行“happy 1 2 3 4 5 6”而导致的。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<bits/stdc++.h>
using namespace std;
int a,b,s[10],flag=1;
void angry() {  //丢弃的棋子数 
	int l[10];
	for(int i=1; i<7; i++) { //判断丢弃棋子后是否小于0 
		cin>>l[i];
		if(s[i]-l[i]<0) {
			flag=0;
			return ;
		} else {
			continue;
		}
	}
	for(int i=1; i<7; i++) { //不能边输入边判断因为可能有几个丢弃棋子后依然大于0而后面有棋子小于0这时你前面的值发生改变) 
		s[i]-=l[i];
	}
}
void count() { //输入当前棋子数量 
	for(int i=1; i<7; i++) {
		if(i!=1) cout<<" ";
		cout<<s[i];
	}
	cout<<endl;
}
void happy() { //捡回棋子数 
	int l[10];
	for(int i=1; i<7; i++) {
		cin>>l[i];
		if(s[i]+l[i]>b*10) { 
			flag=0;
			return ;
		} else {
			continue;
		}
	}
	for(int i=1; i<7; i++) {  //和上面道理一样 
		s[i]+=l[i];
	}
}
int main() {
	cin>>a;
	while(a--) {
		memset(s,0,sizeof(s));
		cin>>b; //棋盘数量 
		for(int i=1; i<7; i++) { //初始化棋子数量  
			s[i]=10*b;
		}
		string s;
		while(cin>>s&&s!="finish") { //循环判断s的值 
			flag=1;
			if(s=="angry") {
				angry(); //自定义函数看上面 
				if(!flag) {  //棋子数小于0时impossible 
					cout<<"impossible"<<endl;
					continue;
				}
			} else if(s=="count") {
				count();  //自定义函数看上面  
			} else if(s=="happy") {
				happy(); //自定义函数看上面 
				if(!flag) {   //棋子数大于2*b时impossible 
					cout<<"impossible"<<endl;
					continue;
				}
			}
		}
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值