首页 > 试题广场 >

#include us...

[单选题]
#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
i % 3 按1、2、0循环,所以ans按1、3、3、2、0、0循环,然后1001%6=5,故ans=0.
发表于 2020-04-21 17:17:07 回复(0)
for循环中的ans ^= i % 3 可得出ans的值是以 1 3 3 2 0 0 六个数循环的,即6n的值为0,6n - 1 也为0,1001 = 6n - 1,故答案为B
发表于 2019-09-03 15:16:21 回复(2)
i=                 1      2      3     4      5        6       7        8       9        10       11       12
i%3              1      2      0     1      2        0       1        2       0          1         2        0 
ans              1      3      3      2     0        0       1        3       3          2         0        0
1001%6=5,对应的ans为0
编辑于 2021-11-06 21:57:40 回复(1)
首先,ans^=i%3 即将ans与i%3进行异或(二进制)1%3=1 ans=0 then: 00 xor 01 = 01 now ans=01(1)2%3=2 ans=1 then: 01 xor 10 = 11 now ans=11(3)...以六为循环,得到ans=0
发表于 2021-03-16 10:53:40 回复(0)
评论区写的些啥?
发表于 2021-02-23 20:19:30 回复(1)
异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
发表于 2022-05-25 09:23:31 回复(0)
以1 2 0做循环先循环333次,n到达999最后还剩1 2,结果就有334个1,334个2,偶数个数进行异或为0,比如4个2异或就是0,所以结果就是0
发表于 2020-04-04 12:07:21 回复(2)
0^1 = 1, ans = 1;1^2 ->01 ^ 10(二进制) = 11(3),ans=3;依次往后。。。
发表于 2022-03-10 21:22:24 回复(0)
1 ^ 2 = 3 即 0001 ^ 0010 = 0011 其它同理
发表于 2023-03-13 19:39:14 回复(0)
1 3 3 2 0 0这六个数循环,1001除以6余下5,第五个为0
发表于 2022-09-16 15:39:17 回复(0)
为什么C语言总能出来C++的题
发表于 2021-10-09 18:06:09 回复(3)
^为异或运算,即两者必须不同才为1,都为0或1结果都为0;跟c还是c++关系不大,属于基础知识
发表于 2023-12-25 20:35:20 回复(0)
用二进制来计算异或
发表于 2023-09-14 21:57:26 回复(0)
pp是指向指针常量的指针 是否可改只要看最内部即可 int * const p 指针是常量 int const *p 指向的是常量
发表于 2023-01-13 14:32:06 回复(0)
本题的意思是取 1到1001的所以值和3取余之后的异或结果,(1, 2, 3)和3取余的结果是 (1, 2, 0).....(997, 998, 999)和3取余的结果是 (1, 2, 0), 这样就有333组 (1, 2, 0), (1000, 1001) 和3取余的结果是 (1, 2), 所以共有334个 (1,2)和333个0取异或,又因为 a = b^a^b ,所以偶数个(1,2)异或之后不对ans产生影响,所以ans 的值就是334个0异或的结果0(ans本身是0,如果这里ans初始化为其中值,那么结果就是 ans和0异或的结果,就是ans的原来的值)
发表于 2022-09-06 09:02:00 回复(0)
i%3的结果按照1,2,0循环,1001中总共包含333个循环与一个单独的1,2。
两个相同的数异或操作结果为0,所以333个循环操作中,最后的结果为:1^2^0;
加上最后单独的1,2为:1^2^0^1^2=0
发表于 2022-08-09 10:15:32 回复(0)
看了大家的解析,很多都是按照计算出六个数异或的值来做的,下面我来分享一下我的思路。
我们知道每3次循环ans的结果是这样的  ans = ans ^ 1 ^ 2 ^ 0,那么想一想当我们总的循环次数除以每三次循环得出的是偶数次时,ans进行异或得到的还是ans,就相当于 ans = ans ^ 1 ^ 2 ^ 0 ^ 1 ^ 2 ^ 0 = ans;这里总的循环次数为1001 / 3 = 333.....2,那么前332个循环就为ans,后面还剩5次循环 ans = ans ^ 1 ^ 2 ^ 0 ^ 1 ^ 2 = 0。
可能讲的你们会觉得有点麻烦,但是你自己去仔细思考一下,你会发现很容易的就找出了规律,根本不需要进行6个数的异或来算出来。总之我的方法就是避免了去计算找到规律,而是想办法将它们约掉。实际上在进行位运算时大多数情况我们是采用能约就约,绝不计算的方式。
发表于 2022-07-30 11:15:18 回复(0)
i%3按照1 2 0循环 两轮循环后ans的值不变
发表于 2022-03-14 09:15:14 回复(0)
看不懂啊。什么东西
发表于 2021-10-01 20:19:46 回复(0)