實現乙個函式,對乙個正整數n,算得到1需要的最少操作次數。操作規則為:如果n為偶數,將其除以2;如果n為奇數,可以加1或減1;一直處理下去。
例子:func(7) = 4,可以證明最少需要4次運算
n = 7
n-1 6
n/2 3
n-1 2
n/2 1
要求:實現函式(實現盡可能高效) int func(unsign int n);n為輸入,返回最小的運算次數。給出思路(文字描述),完成**,並分析你演算法的時間複雜度。
#include using namespace std;
int func(unsigned int n)
int func1(int n)
else
else
}
} return s[n];
}int func2(unsigned int n)
//如果是奇數,+1還是-1的標準是:n'這個整數的各個位中為1的個數最少,如果相同,當然-1.
t = n - 1;
t = (t & 0x55555555) + ((t & 0xaaaaaaaa) >> 1);
t = (t & 0x33333333) + ((t & 0xcccccccc) >> 2);
t = (t & 0x0f0f0f0f) + ((t & 0xf0f0f0f0) >> 4);
t = (t & 0x00ff00ff) + ((t & 0xff00ff00) >> 8);
t = (t & 0x0000ffff) + ((t & 0xffff0000) >> 16);
s = n + 1;
s = (s & 0x55555555) + ((s & 0xaaaaaaaa) >> 1);
s = (s & 0x33333333) + ((s & 0xcccccccc) >> 2);
s = (s & 0x0f0f0f0f) + ((s & 0xf0f0f0f0) >> 4);
s = (s & 0x00ff00ff) + ((s & 0xff00ff00) >> 8);
s = (s & 0x0000ffff) + ((s & 0xffff0000) >> 16);
if(s < t)
else
k ++;
} return k;
}int _tmain(int argc, _tchar* argv)
system("pause");
return 0;
}
對乙個正整數n,算得到1需要的最少操作次數
實現乙個函式,對乙個正整數n,算得到1需要的最少操作次數。操作規則為 如果n為偶數,將其除以2 如果n為奇數,可以加1或減1 一直處理下去。例子 func 7 4,可以證明最少需要4次運算 n 7 n 1 6 n 2 3 n 1 2 n 2 1 要求 實現函式 實現盡可能高效 int func un...
1713 得到子串行的最少操作次數
題目描述 給你乙個陣列 target 包含若干 互不相同 的整數,以及另乙個整數陣列 arr arr 可能 包含重複元素。每一次操作中,你可以在 arr 的任意位置插入任一整數。比方說,如果 arr 1,4,1,2 那麼你可以在中間新增 3 得到 1,4,3,1,2 你可以在陣列最開始或最後面新增整...
奶牛喝水最少需要的交換次數
題目描述 有n 1 n 1000 頭奶牛,它們都被標上乙個優先等級編號 1,2或3。用來表示它們喝水時的優先次序,編號為l的最優先,編號為2的其次,編號為3的最後。每天奶牛開始時排成一行,但總是很亂,需要你把它們重新排成編號為1的奶牛在最前面,編號為2的其次,編號為3的奶牛在最後。你能計算出最少需要...