vivo2020春校招 數字之積

2022-01-20 13:41:00 字數 1164 閱讀 1440

現給定任意正整數 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...