問題a:
1~n整數中,包含位數1的個數。
dp演算法,時間o(log10(n))
假設數字n各個位置上的數組成arr[n],
dp[i] 表示位置i上的1可以出現的次數。
可以加三個輔助陣列加速計算:
sumfront記錄位數i之前數字的代數和。
sumback記錄位數i之後位數的代數和。
base記錄位數i的等級。
對於例子n=21045n2
1045
base
10000
1000
10010
1sumfront02
21210
2104
sumback
1045
454550
**如下:
問題b:
數字從0開始首尾相接拼成長字串,求第n位置上的數字是幾?
例如0123456789101112…中第13位數字是1
模擬做法,時間o(log10(n))
當前位數個數k個,k=1
步驟:1,計算k位數字拼接後的長度l,判斷n是否在內,不在n減去長度l,並k++。
2,當n在k位數拼接之內,則n位置一定是100…0到99…9之間某一位數,n/k大致定位n位置所在的數字,通過n%k進一步判斷位置。
問題c:
陣列中有n個數,把n個數首尾拼接後獲得最小的數。
貪心做法,時間o(nlogn)
例如,3,32,321,拼接最小數321323
預處理,把所有數字變一樣長,333,322,321,其中,後面缺的數用最後一位補齊,然後排序,將所有數首尾拼接。
問題d:
乙個數二進位制表示中1的個數
public int fun1(int n)
略
問題e:
陣列中乙個數字出現1次,其他數字出現3次,找出該數字。
統計每個位置上1出現的次數,可以整除3則代表該數字該位置上為0,否則為1。
問題f:
陣列中2個數字出現一次,其他都出現兩次,找出這兩個數字。
所有數字位抑或,結果數字中位置為1的地方表示2個數字位置上乙個為1乙個為0。
抑或所有該位置上為1的數字,則可以找到第乙個數字。
結果數字與第乙個數字抑或,則可以找到第二個數字。
問題g:
位運算做加減乘除: a+1
b+(a
−a+1
b×b)
b\frac + \frac \times b )}
ba+1+
b(a−
ba+1
×b)
問題h:
一種字串和數字對應關係,
給定乙個字母表,str=[「a」,「b」,「c」],代表a = 1, b=2,c=3,aa=4,ab=5,ac=6,ba=7…
再給乙個數字k,則對應字串是?
由於字母表有三個字母,則是偽三進製,不同長度三進製數可以表示數字數量為,1,3,9,27,81…
數字k依次減去每個位上的數量,直到不夠減,從而得到數字k由幾個字母組成。
上一步的到剩餘數t,再考查t由幾個1,3,9,27…組成,
加上k之前每個位置都用了一次,得到最終每個位置上的數量。
c演算法 數字加密解密
題目 某個公司採用公用 傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下 每位數字都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。include void encryptnumber int a void decryptnumber int a ...
演算法 數字遞增的數
2.解決方案 3.資源分享 題目 演算法 數字遞增的數 問題描述 乙個正整數如果任何乙個數字不大於右邊相鄰的數字,則稱為乙個數字遞增的數,例如1135是乙個數字遞增的數,而1024不是乙個數字遞增的數.給定正整數 n,請問在整數 1 至 n 中有多少個數字遞增的數?輸入 輸入的第一行包含乙個整數 n...
訊息摘要演算法 數字摘要
為了保證檔案或值的安全性,因為使用訊息摘要生成的值是不可篡改的 特點 準備工作 string input 訊息摘要 string algorithm md5 public static void main string args throws exception 建立乙個訊息摘要物件messaged...