两个C语言面试题
1、数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
int do_dup(int a[],int N)
2、一语句实现x是否为2的若干次幂的判断
[解决办法]
一语句实现x是否为2的若干次幂的判断
- C/C++ code
//其实就是位运算。#include <stdio.h>int main( ){ int x; scanf("%d", &x); if ( x & ( x - 1 ) == 0 ) printf("是2的幂"); else printf("不是2的幂"); return 0;}
[解决办法]
- C/C++ code
int do_dup(int a[],int N) { int eora = 0,eorb = 0; for (int i = 0 ; i != N; ++i) { eora ^= (i + 1); eorb ^= a[i]; } return N^eora^eorb;}int main(){ int arr[] = {1,2,3,4,4,5}; cout<<do_dup(arr,6)<<endl; return 0;}