進製轉換問題

2021-07-03 06:58:35 字數 1388 閱讀 4102

一、引題

題目大意:a和b

兩個人一起吃飯,一共有

n道菜,從

0,1,……

n-1編號,菜按順序輪流上,

a只能吃偶數編號的菜,即

0,2,4

……,b

只能吃奇數編號的的,每個人都可以選擇吃或不吃。每道菜對應乙個歡樂度

2^i(

i=0,1

,……,

n-1),現在知道  

d = 

歡樂度(

a-b) 的值,問他們兩總共吃了幾道菜?

解題思路:

當b吃乙個菜時,在對應的位置需要 -2^i 等於(-2)^i,偶數字置時2和 -2沒有區別,所以判斷某個位置有沒有吃,只需要將d化為負二進位制即可知。

實現:此處我們用除(-2)取餘法來實現將乙個數轉換為負二進位制,但是不記錄最後結果,只判斷1的個數即可得到結果。

int solve (int d , int n)

int num = 0 ; //記錄1的個數

int k = 0 ;   //記錄當前位

while(d != 1 ) //結束條件

if(d % (-2) == 0) 

d = d / (-2);

k ++ ;

continue;

if(d < 0 ) d = d / ( -2 ) + 1;  //此處需要特別注意,計算機在計算負數除法時會和實際結果有偏差

else d = d / (-2) ;

num ++ ;

k ++ ;

if(k > n - 1 ) break ;   

if(k <= n - 1) return num ;

else  return -1;

二、延伸

由此我們可以得出一類問題的解法:即將某類差值問題、求和問題等凡是和n的冪(遞增)有關的問題都可以嘗試著用進製轉換問題去解決。

在轉換的時候需要注意以下幾點:

1、轉換為負數進製時商的問題

2、轉換結束條件

關於這兩個問題用幾個例子來說明,更好理解:

將11轉換為-2進製:

11      1

-5      1

3       1          //注意此處為三,編寫**需要處理

-1     1

1                //商為1 , 小於|-2|,轉換結束

所以11轉換為-2進製為 11111 ,但是11轉換為二進位制是1011.

將24轉換為 -4 進製:

24     0

-6       2

2       // 此處為2 ,計算機算為1,需要處理。2 小於4 ,轉換結束

24的-4進製為 :220 

**實現參照引題,稍作修改即可。

進製轉換問題

基礎 進製轉換問題 easy time limit 1000ms memory limit 65536k total submit 271 accepted 153 description 若將乙個正整數n化為二進位制,在此二進位制數中,我們將數字1的個數多於數字0的個數的這類二進位制數稱為a類數,...

進製轉換問題

基礎 進製轉換問題 easy time limit 1000ms memory limit 65536k total submit 271 accepted 153 description 若將乙個正整數n化為二進位制,在此二進位制數中,我們將數字1的個數多於數字0的個數的這類二進位制數稱為a類數,...

進製轉換問題

最近公司在招聘開發工程師,想考察一下他們的基本功和常識。問了進製轉換的問題,有很多人就徹底懵逼了,其實進製轉換就是高中學習的排列組合的問題。想必大家碰見過這樣的問題。有三個抽屜,現在又7種顏色的球若干。現要求每個抽屜必須放且只能放乙個球,問多少種放法。其實這就是每個抽屜都有7個選擇的機會,而他們相互...