微软最新面试题代码实现

    技术2022-05-11  59

    是不是“微软最新面试题”本人没有考证:) 题目 见 http://community.csdn.net/Expert/TopicView3.asp?id=5337353 作  者:         libihui422 (晶钻) 从1到1000000中任意拿掉两个数,把剩下的999998个数顺序打乱,并且放入数组中。要求只扫描一遍数组,把这两个数找出来。可以使用最到不超过5个局部变量,不能用数组变量,并且不能改变原数组的值。 思路  回复人:Oversense(步步文) ( 三级(初级)) 信誉:100     2007-2-4 1:04:56     得分:0 ?     x+y=a x*x+y*y=b 1+2-a[1]-a[2]+3+4-a[3]-a[4] 代码 #include  < vector > #include  < iostream > #include  < algorithm > #include  < iterator > #include  < cstdio > using   namespace  std;#ifdef WIN32    typedef __int64 INT64;    ostream &   operator << (ostream &  os, INT64 n)     {        printf("%I64d", n);        return os;    } #else     typedef unsigned  long   long  INT64;    ostream &   operator << (ostream &  os, INT64 n)     {        printf("%lld", n);        return os;    } #endif const  INT64 SIZE  =   1000001 ; void  init_array(vector < INT64 >&  array); void  find_2_missing( const  vector < INT64 >&  array); int  main( void ) {    vector<INT64> array;    init_array(array);    find_2_missing(array);    return 0;} void  init_array(vector < INT64 >&  array) {    array.resize(SIZE + 1);    for (INT64 i = 0; i <= SIZE; ++i)    {        array[i] = i;    }    cout << "input 2 missing numbers: ";    int m1, m2;    cin >> m1 >> m2;    array[m1] = 0;    array[m2] = 0;//  copy(array.begin(), array.end(), ostream_iterator<INT64>(cout, " "));    random_shuffle(array.begin()+1, array.end());} void  find_2_missing( const  vector < INT64 >&  array) {    INT64 x_plus_y = 0;    INT64 xx_plus_yy = 0;    for (INT64 i = 0; i <= SIZE; ++i)    {        x_plus_y += i - array[i];        xx_plus_yy += i*- array[i]*array[i];    }    cout << "x + y = " << x_plus_y << endl;    cout << "x^2 + y^2 = " << xx_plus_yy << endl;}

    最新回复(0)