首页 > 试题广场 >

则上述程序输出为( )

[单选题]
#include <bits/stdc++.h>
using namespace std;
int main(){
int n = 1001;
int ans = 0;
for(int i = 1; i <= n; ++i){
ans ^= i % 3;
}
cout << ans << endl;
}

则上述程序输出为( )
  • -2
  • 0
  • 1
  • 2

简单解析一下(口答,不具权威型,如有更严谨的回答的同学,请联系我删掉此条解析):
^为异或符号,这题意思是从1到1001依次对3取模后互相异或;
我们发现,i=1、2、3时,异或后的结果是3,i=4、5、6时恰好和第一组互补,结果为0;
那么1001/3 = 333组,是个奇数,所以结果应该是3,但1001%3 = 2,整除后还余两次循环,因此3再与后两次进行异或,结果应该是0

发表于 2019-08-16 17:34:50 回复(1)
i=1,2,3,4,5,6时,ans分别为1,3,3,2,0,0     到后面依次循环,因此6个为1组,1001%6=5,所以看i=5时ans=0,因此答案为0  
发表于 2019-10-01 17:18:38 回复(0)
以0作为开始对3求余后进行异或,那么手动计算i=1到7,可以看到结果是,01.11.11.10.00.00.01从i为7开始重复。那么1001%6=5,结果就是0
发表于 2019-09-07 10:58:23 回复(0)