牛客網 華為機試 015

2021-08-03 12:58:41 字數 894 閱讀 9570

輸入乙個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。

輸入乙個整數(int型別)

這個數轉換成2進製後,輸出1的個數

示例1

5

2

思路一:利用十進位制轉二進位制的方法,統計1的個數。事實證明這種方法是大錯特錯了,因為效率不高且沒有考慮負數的情況,負數補碼,完全不能這麼計算

#include //錯誤解法,能通過牛客網oj

using namespace std;

int main()

cout << count << endl;

}return 0;

}

思路二: eg:假設整型佔4位空間, 讓乙個數分別和 0001 0010 0100 1000位於,結果非零則說明有乙個1,即從1開始位於,下一次1左移1位,再下次左移,一直到左移到值為0。

/基本解法,eg分別用0001、0010、0100、1000位與,非零則說明有1

int numof1(int num)

思路三:終極美滋滋解法,面試官的最愛。

eg: 當乙個數減去1,在和原數字與,就會把最右邊的第乙個1變為0. 如:

原數 n = 1100   n-1 = 1011

n & (n - 1) = 1000  最右邊第乙個1變為0,如此下去直至n為0,次數即為1的個數

//優秀解法 num = (num - 1) & n 將右邊的1全置為0

int numof1ex(int num)

return count;

}

牛客網 華為機試 020 牛客網

密碼要求 1.長度超過8位 2.包括大小寫字母.數字.其它符號,以上四種至少三種 3.不能有相同長度超2的子串重複 說明 長度超過2的子串 一組或多組長度超過2的子符串。每組佔一行 如果符合要求輸出 ok,否則輸出ng 示例1 021abc9000 021abc9abc1 021abc9000 02...

牛客網 華為機試 009

輸入乙個int型整數,按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。輸入描述 輸入乙個int型整數 輸出描述 按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數 示例1 9876673 37689 思路 維護乙個陣列或者vector長度為10,下標0 9代表取得數字,值代表是否已經輸出...

牛客網 華為機試 017

開發乙個座標計算工具,a表示向左移動,d表示向右移動,w表示向上移動,s表示向下移動。從 0,0 點開始移動,從輸入字串裡面讀取一些座標,並將最終輸入結果輸出到輸出檔案裡面。輸入 合法座標為a 或者d或者w或者s 數字 兩位以內 座標之間以 分隔。非法座標點需要進行丟棄。如aa10 a1a yad ...