C语言编程实现之一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
程序员文章站
2022-04-12 20:16:10
C语言编程实现之一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
代码实现(环境:Visual Studio 2017)
//一个数组中只有两个数...
C语言编程实现之一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
代码实现(环境:Visual Studio 2017)
//一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 //找出这两个数字,编程实现。 #include #include void find(int a[], int sz) { int i = 0; int num1 = 0; int num2 = 0; int num = 0; int flag = 0; for (i = 0; i < sz; i++) { num = num^a[i]; } for (i = 0; i < 32; i++) { if (((num >> i) & 1) != 1)//找异或之后这个数字二进制数中最先出现的1的位置 { flag++; } else break; } for (i = 0; i < sz; i++) { if (((a[i] >> flag) & 1) == 1)//分成2组 num1 ^= a[i]; else num2 ^= a[i]; } printf("%d %d\n", num1, num2); } int main() { int a[] = { 1, 2, 2, 6, 6, 4, 4, 5, 8, 5 }; int sz = sizeof(a) / sizeof(a[0]); find(a, sz); system("pause"); return 0; }