1.     已知x,不用+,-,*,/符號,計算出x+1的值;
當時的分析就是分情況最后一位是
01,最后總結出來只要把從右開始數,第一個0位置1就行了,可是我當時沒有想出代碼來,再此瞭望下面的代碼,學習一下。。

解答:
1.     假設是整數
int Add(int x)
{
int n = x, b =1;
while( (n & b)) {
n = n& (~b); //將0后的1也轉化為0
b = b < <1;
}
return (n | b);
}

還有一種解法是

x=abs((float)~x);

2.   檢驗一個整數是否為2n次方數,要求用一行代碼,而且不能使用循環語句

解法:

x&(x-1)? false:true,

這個題就不知道該咋總結了,應該說是老題了,位運算,頭一次見的時候,可以多試試,看看有什么規律,還是可以發現的。。

topic.csdn.net\u\20081029\10\ee84a378-bdd0-41ec-a4af-916ba59baaba.html




3.
2個數組,元素數值按從小到大排序,
a[]={0,2,4,5,7,8,9,.....1000},
01000,到但有缺漏的.900個元素.
b[]={0,1,2,3,4,5,6,.....1000},
01000,無缺漏,1001個元素
請建立一個對應的數組,元素個數等于b數組個數,也是從小大到排序.如果b數組里的數字在a里面,則數值等于b數組里的,
如果不在,則對應位為0.例如c={0,0,2,0,4,5.....1000}
請設計最優方案.


解答:

這個題出眼一想,把b中每一個元素去和a里面找,有的話,填c,沒有的話,填0.。算一下復雜度,1000*900~~

如此簡單~~

再想想,題不可能這么簡單,要這樣都會了。。都聘用了,還刷選啥,,

那么用邏輯思維怎么做這道題呢,這個題主要是求c,那么c有什么特點呢?(專注于未知數),,里面有0和一些數,關鍵就在這些數,有什么特點呢,可以想到當a里面有時,那么c就有(b始終都有),,,靈光一閃,怎么象函數泥,,是不是映射呢,每個a映射到c

繼續,a當函數的參數,c[a[i]]=一個非零數。。這個非零數是多少呢,特例法試試:當a[i]2時,c[2]=2,當a[3]=3,c[3]=0;a[4]=4,c[4]=4,,可以發現這個是個y=x函數,當b中的一個數,a中有時,那么這時c[i]=b[i]=a[i];沒有時,a[i]=0,那么c[0]=0..。。。。。。。。
進而得到答案:

先對c所有賦初值0

完了,掃描一下a,對每個a的元素,使用:c[a[i]] = a[i];

topic.csdn.net\u\20090302\18\2A7DA801-42A9-49AE-9759-420CB6BF29F0.html

3. 一億個整數里找出現次數最多的前N個數

解答:

首先必須明確的是,必須遍歷全部的的整數才能找出,不要想什么特別的技巧,可以非常快的找出來。。

直觀的,用快排將一個數排序,然后取前n個,,需要明確的是,快排不是穩定的排序,有時它的復雜度是很高的,可以達到n^2,想一想,一億的平方,不是很小的數,,,這里有個方法“位圖法”,很常用的方法:

1億==100M
開辟200M內存夠了...
array[100000000]
初始化為0

從文件里讀入數據到source[100000000]數組中。
遍歷source[]:
array[source[i]-1]++;
i=0...99999999

定義數組
result[N]

問題簡化為:從array中選出N個下標值,它們對應了array中存儲的最大的N個數。

比如array[0]=50000000,array[1]=50000000,那么result[0]=0+1=1
result[1]=1+1=2

發現上面兩題之所以用嵌套數組,一個共同點就是,他們的元素是全的(0..*),本體的解法很巧妙,,,,我就不多廢話了,可以多體會體會。。

topic.csdn.net\u\20080821\21\f6d4cd24-f878-419c-adc3-0928ffd3e394.html

4求第K大的素數

如題 k=1 輸出 2 k=2 輸出 3

 1= <k <=10000
時間限制 1S


這個題應該不是所謂的面試題,應該算一道
acm,不過感覺這道題很有意思,所以也就寫到這里了。。

我當時是上外方課時想這道題的,剛開始的時候顯然走了彎路,后來才意識到,這個是求第k個素數,所以需要精確的計算到第k(素數產生并沒有什么大致的規律),而不是大致的估算。。那么下面我的思路就清晰了,,只能一個一個判斷了。。。

#include <iostream>
using namespace std;

long f(int *A,int k)
{
    
if (k==1)
    
{
        
return 2;
    }

    A[
0]=2;
    
int i=3;
    
int index;
    
for (;A[k-1]==0;i+=2)
    
{
        
for (index=0;A[index]!=0;++index)
        
{
            
if (i%A[index]==0)
            
{
                
break;
            }

        }

        
if (A[index]==0)
        
{
            A[index]
=i;
        }

    }

    
return A[k-1];
}


int main()
{
    
int n=10000;
    
int *A=new int[n];
    
for (int i=0;i<=n-1;++i)
    
{
        A[i]
=0;
    }

    
int k;
    cin
>>k;
    cout
<<f(A,k);
    system(
"pause");
    
return 0;
}

這個是lz的代碼,而我的想法差不多,唯一的區別是我是想弄個函數來判斷是否是素數,而她是除以每個前面的素數來判斷。。。我們倆的效率都不是很高,看下面的:

private int[] GetPrimeList(int upperValue)
        
{
            List
<int> PrimeList = new List<int>();
            
bool[] flags = new bool[upperValue + 2];

            
for (int i = 2; i <= (int)Math.Sqrt(upperValue); i++)
            
{
                
if (!flags[i])
                
{
                    
for (int j = i * i; j <= upperValue; j += i)
                    
{
                        flags[j] 
= true;
                    }

                }

            }


            
for (int i = 2; i < upperValue; i++)
            
{
                
if (!flags[i])
                
{
                    PrimeList.Add(i);
                }

            }


            
return PrimeList.ToArray();
        }


這個叫litaoye果然很nb,他寫的代碼實在是比我們的好多了,可以看出來,他對素數的理解顯然比我深多了,我只想著怎么數素數,素數有什么規律嗎,,而他直接想到那些不是素數,,反用了書上的思想。。。很好很強大,,需要好好學習。。。

topic.csdn.net\u\20090225\22\065378f6-4cf7-4d2d-9997-ddb8a2481347.html

 
1. 問題描述:按順序輸入兩個數a,b,轉換成八位二進制表示a',b',再將這兩個八位二進制數拼接成一個十六位二進制數c',規則為:將b'的八位放在c'的高位,a'的八位放到a'的地位,最后將十六位二進制數c'轉換為十進制數c輸出。例如:輸入230001 0111)、140000 1110),c'=0000 1110 0001 0111),最后輸出c=3607

這個題,我一看就準備用bitset了,然后直接就被題目給誤導了。。。汗,,

看來自己還是對這些數的底層不熟,,組成原理沒學好,,明顯的,,

進制的加減其實結果都是一樣,說那么多廢話不過是迷惑我們。。看正解

int _tmain(int argc, _TCHAR* argv[])
{
    
int a = 23;
    
int b = 14;

    cout
<<+ (b<<8)<<endl;

    
return 0;

}

topic.csdn.net\u\20090223\20\907ff5e3-62e4-4963-8f72-279840072b50.htm