現給定任意正整數 n,請尋找並輸出最小的正整數 m(m>9),使得 m 的各位(個位、十位、百位 ... ...)之乘積等於n,若不存在則輸出 -1。
最原始的想法是遍歷,由於這個數一定不小於n,於是從n開始累加,然後轉化為字元陣列,計算積,判斷這個方法很傻,而且很難設定終止條件。
public int solution (int n)
if(m>6*n)return -1;
else if (m==n) return a;
a++;
}}
先把這個數徹底因式分解 n=n1*n2···nx如果有個因子大於9,一定不存在m,why?
我們知道這個因子一定不是2-9的倍數,那麼我們用個位數的乘積一定得不到這個數,故一定不存在m,直接返回-1
於是我們確定因式分解後因子 在2~9之間
我們使用陣列來存放每個因子出現的次數。arr[i]代表i出現的次數
要使m最小,那麼一定要使大的數字在低位,如9應該放在個位等低位。
我們從高位9到低位2掃瞄陣列,找出所有的能夠組成較大的數的因子,用於填充低位。
最後得到的數一定是最小的。
public int solution (int n)
}string res = ""; //用乙個字串存放結果
for(int i=9;i>0;i--)
//再看有沒有多個數積是i的
//由於不同的i 的因子組成不同,如8=2*2*2= 2*4,於是分情況討論
switch(i)
break;
case 8:
while(arr[2]>=3)
while(arr[2]>0&&arr[4]>0)
break;
case 6:
while(arr[2]>0&&arr[3]>0)
break;
case 4:
while(arr[2]>=2)
//7、5、3是素數,不能被非1因子分解}}
return integer.valueof(res);//返回結果
}
vivo2020春招 02 數字之積
現給定任意正整數 n,請尋找並輸出最小的正整數 m m 9 使得 m 的各位 個位 十位 百位 之乘積等於n,若不存在則輸出 1。對於n,找出2 9中所有能被它整除的數,然後組合成乙個最小的整數即可 輸入乙個整形數值,返回乙個整形值 param n int整型 n 9 return int整型 cl...
vivo2020屆春季校園招聘手機螢幕解鎖模式
現有乙個 3x3 規格的 android 智慧型手機鎖屏程式和兩個正整數 m 和 n 請計算出使用最少m 個鍵和最多 n個鍵可以解鎖該螢幕的所有有效模式總數。其中有效模式是指 1 每個模式必須連線至少m個鍵和最多n個鍵 2 所有的鍵都必須是不同的 3 如果在模式中連線兩個連續鍵的行通過任何其他鍵,則...
2023年3月vivo春招 筆試
1 在vivo生產線上,每位職工隨著對手機加工流程認識的熟悉和經驗的增加,日產量也會不斷飆公升。假設第一天量產1臺,接下來2天 即第 二 三天 每天量產2件,接下來三天 即第 三 四 五天 每天量產3件。以此類推,計算出第n天總共可以量產的手機數量。2 現給定任意正整數n,請尋找並輸出最小的正整數m...