有两副跳棋可以玩,诺诺很高兴。某天,诺诺突然有点恼,把玩着的若干跳棋子扔到地上,跳棋子在地上活蹦乱跳,诺诺又高兴起来了,于是又把棋子捡起来。但有些棋子可能跳到很隐蔽的角落,捡不回来了。这样的事情以后经常发生,于是数棋子就成为家常便饭。我们知道,每副跳棋都有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;
}