友情提示:380元/半年,儿童学编程,就上码丁实验室。
题目描述:
小明以自己的人格担保他最后一个回答一定是正确的,但并不保证其它的回答是对的。
每个数为小明对上一个的回答,若为0表示说上句话是错的,若为1表示说上句话是对的。根据他四次的回答,请输出他原来的四句话的对与错。
输入格式:
一行四个数,表示他回答的每次的对错值。
输出格式:
一行四个数,为小明四句话的对错,对输出1、错输出0。
样例输入:
1 0 0 0
样例输出:
0 1 0 1
提示:
样例说明:
最后第4个回答肯定是对的,所以直接输出1。
因为第4个回答是对的,第4个回答的值是0,所以第三个说谎了,输出0。
因为第3次说谎了,第3个回答的是0,所以第2次是对的,输出1。
因为第2次没有说谎,第2个回答是0,所以第一次说谎了,输出0。
最后倒着输出。
时间限制:1000ms
空间限制:256MByte
解题:
把小明每次回答的内容放在数组ans[],把每次回答正确与否放在数组res[],分析题意,我们可以得出以下这张表格:
“ans[i]” - 本次回答内容 | 0 | 0 | 1 | 1 |
“res[i]” – 本次回答是否正确 | 0 | 1 | 0 | 1 |
“ans[i-1]” – 上次回答是否正确 | 1 | 0 | 0 | 1 |
代码:
using namespace std;
int main()
{
bool ans[4], res[4];
for(int i=0; i<=3; i++) cin>>ans[i]; //把小明每次回答的内容放在数组 a
res[3] = 1; //最后一次回答一定是正确的
for(int i=3; i>=1; i--){
if(res[i]==ans[i]) res[i-1]=1;
else res[i-1]=0;
} //见表格
for(int i=0; i<=3; i++) cout<<res[i]<<' ';
return 0;
}