读书人

两个C语言面试题解决方法

发布时间: 2012-04-06 12:22:24 作者: rapoo

两个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;} 

读书人网 >C语言

热点推荐