有一个奇怪的国家,里面的国民对于事情的态度永远只有两面。当两个人遇到一起讨论一个事情的时候——两个持赞同观点的人遇到一起后会对这个事情都继续赞同;一个持赞同观点的人遇到一个持不赞同观点的人的时候,两人都会不再继续赞同;两个持不赞同观点的人遇到一起讨论后反而会对这个事情开始赞同。
输入格式
输入包括两行,每行包括 N(1≤N≤50) 个数字,分别表示两个人对于 N 个事情对应的看法——0 表示不赞同、1 表示赞同。
输出格式
输出包括一行,包括 N 个数字,表示两人相遇后,对于这 N 件事情的最终看法。
样例输入
11100101
00101011
样例输出
00110001
#include<stdio.h>
int main()
{
char a[50],b[50],c[50];
char pa,pb;
scanf("%s%s",a,b);
int i = 0;
pa = a[0];
pb = b[0];
while ((pa != '\0')&&(pb != '\0')&&(i<49)){
if (pa == pb) c[i] = '1';
else c[i] = '0';
printf("%c",c[i]);
i++;
pa = a[i];
pb = b[i];
}
return 0;
}
思路:用字符串记录输入的a和b,并对每一个字符遍历,若相同则为1,否则为0,按位输出。
总结:这个做的不够好,没有理解位运算是怎么个运算法。
在viviov博主的博客(http://blog.csdn.net/viviov/article/details/44997745)中看到位运算的解法,比我的方法好很多,摘录如下:
#include<iostream>
using namespace std;
int main(){
char a[50]={'\0'},b[50]={'\0'};
cin>>a>>b;
for(int i=0;a[i]!='\0'&&i<50;i++){
cout<<(int)(1-(a[i]^b[i]));
}
return 0;
}