1.编程实现:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
请找出这个数字
#include "stdio.h"
int main()
{
int i = 0;
int j = 0;
int arr[] = { 1, 2, 3, 1, 2 };
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
for (j = 0; j < sizeof(arr) / sizeof(arr[0]); j++)//先逐个比较
{
if (arr[i] = arr[j])//如果相同,则都置为0
{
arr[i] = 0;
arr[j] = 0;
break;
}
}
}
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)//比较后在数组中查找不是0的数
{
if (arr[i] != 0)
{
printf("%d", arr[i]);
}
}
system("pause");
return 0;
}
2.unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
#include "stdio.h"
unsigned int reverse_bit(unsigned int value)
{
unsigned int tmp = 0;
int i = 0;
while (i < 32)
{
tmp = tmp << 1;//将tmp左移一位
tmp |= (value >> i) & 1;
i++;
}
return tmp;
}
int main()
{
int n = 0;
unsigned int m = 0;
printf("请输入一个数:");
scanf_s("%d", &n);
m=reverse_bit(n);
printf("%u\n", m);
system("pause");
return 0;
3.不使用(a+b)/2这种方式,求两个数的平均值。
#include "stdio.h"
int equal(int i, int j)
{
int tmp = 0;
tmp = i&j + ((i^j) >> 1); //例:0011和0111按位与之后为0011,按位亦或0100右移一位为0010,相加为0101,为4
return tmp;
}
int main()
{
int a = 0;
int b = 0;
int k = 0;
printf(" 请输入两个数:\n");
scanf_s("%d %d", &a, &b);
k = equal(a, b);
printf("%d\n", k);
system("pause");
return 0;
}
C语言编程技巧
6万+

被折叠的 条评论
为什么被折叠?



