|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小丑9 于 2023-2-1 19:47 编辑
这个代码目的是,输入五个数,找到只出现一次的数,并输出。
第二十行那里,为什么每次都会执行,当我的输入是 8 5 3 5 8
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- int main()
- {
- int m;
- int a[5];
- for (int i = 0;i<5;i++)
- {
- scanf("%d", &m);
- a[i] = m;
- }//读取数据
- int tag = 1;
- for (int i = 0 ; i < 5; i++)//让所有的数都与数组里的数进行异或
- {
- for (int n = i ; n < 5; n++)
- {
- if (0 == a[i] ^ a[n])//若异或后值为零,说明两个数相等,tag加一
- tag++;
- }
- if (2 == tag)//因为是与数组里所有的数相比,包括本身,所以tag必定会加一,taf为2时,没有相同的数
- printf("%d\n", a[i]);
- }
- }
复制代码
本帖最后由 isdkz 于 2023-2-1 22:24 编辑
第一:对 tag 的初始化应该放在外循环里面,不然的话对于数组后面的元素 tag 没有重置
第二:n 的初始值也应该为 0,因为对于每一个元素有可能跟它重复的数不止在它的后面,也有可能在它的前面
第三:运算符优先级问题,== 的优先级优于 ^,所以你应该加个小括号改变优先级
对你的代码修改如下:
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- int main()
- {
- int m;
- int a[5];
- for (int i = 0;i<5;i++)
- {
- scanf("%d", &m);
- a[i] = m;
- }//读取数据
- int tag;
- for (int i = 0 ; i < 5; i++)//让所有的数都与数组里的数进行异或
- {
- tag = 1; // 1、在外循环中对 tag 初始化
- for (int n = 0 ; n < 5; n++) // 2、n 的初始值应该为 0
- {
- if (0 == (a[i] ^ a[n]))//若异或后值为零,说明两个数相等,tag加一 3、加小括号改变优先级
- tag++;
- }
- if (2 == tag)//因为是与数组里所有的数相比,包括本身,所以tag必定会加一,taf为2时,没有相同的数
- printf("只出现一次的数:%d\n", a[i]);
- }
- }
复制代码
|
|