c++习题34-说谎

目录

一,题目 

二,思路

三,代码


一,题目 

描述

ljc以自己的人格担保他最后一个回答一定是正确的,但并不保证其它的回答是对的。

每个数为ljc对上一个的回答,若为0表示说上句话是错的,若为1表示说上句话是对的。根据他四次的回答,请输出他原来的四句话的对与错。

输入描述

一行四个数,表示他回答的每次的对错值。

输出描述

一行四个数,为小明四句话的对错,对输出1、错输出0。

用例输入 1 

1 0 0 0

用例输出 1 

0 1 0 1

二,思路

  1. 由题可知,需要声明定义一个可以放置4个元素的整型数组 a,由于在后续对该数组 a的处理过程中,该数组a中的值不能发生变化,否则就会影响到后面的结果,因此,需要再定义一个存储结果的整型数组 b(放置四个元素,前三个都是0,根据题目,最后一个结果正确是1)
    ​​​​​​​int a[4],b[4]={0,0,0,1};
  2. 输入ljc的回答​​​​​​​
    for(int i=0;i<4;i++) cin>>a[i];
  3. 数组 b 每一次回答的正确与否取决于数组a 后一次的回答:“若为0表示说上句话是错的,若为1表示说上句话是对的”,即如果后一项 a[i+1]==0,则表示当前 b[i]回答错误,由于数组b的最后一个元素是1(表示正确),因此,直接对数组b[i+1] 取反就是当前 b[i]的结果,否则 a[i+1]==1,当前 b[i]的结果正确,为b[i+1] 的值。
    b[i]=(a[i+1]==0)?!b[i+1]:b[i+1];
    因为在运算过程中需要对数组a 的后一项元素进行判断,所以遍历数组a的索引不能超过数组a 的长度-2,即 索引 i 最大只能遍历到2,并且,由于存储结果的数组b的结果是由后推到前,因此,需要倒序遍历。
    	for(int i=2;i>=0;i--){
    		b[i]=(a[i+1]==0)?!b[i+1]:b[i+1];
    	}
  4.  最后在输出存储结果的数组b时,需要注意空格的输出:最后一个元素后面不需要输出空格,当遍历的索引到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;
}

有问题请在评论区留言或者是私信我,回复时间不超过一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值