目录
解题分析:
- 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。
- 找出这两个数字,编程实现。
异或法:
- 两个相同的数异或的结果是0;
- 所有不为0的数和0异或的结果是本身;
-
#include<stdio.h> #include<stdlib.h> void find_data(int arr[], int len) { int res = arr[0]; int i = 1; int flag = 1; int x = 0, y = 0; for (i=1; i < len; i++) { res ^= arr[i]; } for (i = 0; i < sizeof(arr); i++) { if (res & (flag <<= i)) break; } for (i = 0; i < len; i++) { if (flag & arr[i]) x ^= arr[i]; else y ^= arr[i]; } printf("%d , %d \n", x, y); } int main() { int arr[] = { 1,2,3,5,6,7,7,9,5,6,2,1 }; int len = 0; len = sizeof(arr) / sizeof(arr[0]);//计算元素个数 find_data(arr, len); system("pause"); return 0; }
喝汽水问题:
- 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,
- 给20元,可以喝多少汽水。
- 编程实现。
-
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int num(int n) { if (n != 0) { if (n != 1) { if (n % 2 == 0) { return n + num(n / 2); ; } else { return (n - 1) + num((n / 2) + 1); } } else { return 1; } } else { return 0; } } int main() { int n = 0; printf("请输入钱数:\n"); scanf("%d", &n); int ret=num(n); printf("%d元可以喝%d瓶汽水!!\n", n,ret); system("pause"); return 0; }
运行结果:
-