目录
一,题目
描述
ljc以自己的人格担保他最后一个回答一定是正确的,但并不保证其它的回答是对的。
每个数为ljc对上一个的回答,若为0表示说上句话是错的,若为1表示说上句话是对的。根据他四次的回答,请输出他原来的四句话的对与错。
输入描述
一行四个数,表示他回答的每次的对错值。
输出描述
一行四个数,为小明四句话的对错,对输出1、错输出0。
用例输入 1
1 0 0 0
用例输出 1
0 1 0 1
二,思路
- 由题可知,需要声明定义一个可以放置4个元素的整型数组
,由于在后续对该数组
的处理过程中,该数组
中的值不能发生变化,否则就会影响到后面的结果,因此,需要再定义一个存储结果的整型数组
(放置四个元素,前三个都是0,根据题目,最后一个结果正确是1)
int a[4],b[4]={0,0,0,1};
- 输入ljc的回答
for(int i=0;i<4;i++) cin>>a[i];
- 数组
每一次回答的正确与否取决于数组
后一次的回答:“若为0表示说上句话是错的,若为1表示说上句话是对的”,即如果后一项
,则表示当前
回答错误,由于数组
的最后一个元素是1(表示正确),因此,直接对数组
取反就是当前
的结果,否则
,当前
的结果正确,为
的值。
因为在运算过程中需要对数组b[i]=(a[i+1]==0)?!b[i+1]:b[i+1];
的后一项元素进行判断,所以遍历数组
的索引不能超过数组
的长度-2,即 索引 i 最大只能遍历到2,并且,由于存储结果的数组
的结果是由后推到前,因此,需要倒序遍历。
for(int i=2;i>=0;i--){ b[i]=(a[i+1]==0)?!b[i+1]:b[i+1]; }
- 最后在输出存储结果的数组
时,需要注意空格的输出:最后一个元素后面不需要输出空格,当遍历的索引到3时,输出无元素的字符串(即 '"),前面输出的元素后面都需要输出空格(即" ")
(i<3)?" ":""
三,代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[4],b[4]={0,0,0,1};
for(int i=0;i<4;i++) cin>>a[i];
for(int i=2;i>=0;i--){
b[i]=(a[i+1]==0)?!b[i+1]:b[i+1];
}
for(int i=0;i<4;i++) cout<<b[i]<<((i<3)?" ":"");
return 0;
}
有问题请在评论区留言或者是私信我,回复时间不超过一天。