一個數,各個位數上的數字都不相同稱為美麗的,如5640,有重復數字的則不是,如11,100,給定區間1到100000,輸入在做這一個區間里的一個小區間,然后輸出這個小區間里有多少個數是美麗的,有運算復雜度要求,也就是演算法必須簡潔一點。求哪位大佬能做出來的,救救我吧。。
uj5u.com熱心網友回復:
因為最大的數是100000,不重復的最大數是98765,用一個最大5個元素的陣列和一個表示總的位數的變數就可以了,都不用動態陣列,效率也高些。一個數%10得到個位,除于10去掉個位,不斷地把得到的個位存入陣列,有重復則退出,各個位都不重復就是美麗數了。
uj5u.com熱心網友回復:
要簡潔的話:
int ibn(unsigned int n)
{
for (int r, m = 0; n; n /= 10)
if (r = n % 10, (m >> r) & 1 ? 1 : (m |= 1 << r, 0)) return 0;
return n == 0;
}
回傳值1是美麗數,0不是美麗數,剩下的測驗范圍你自己寫吧
uj5u.com熱心網友回復:
老概的代碼要細細看才會懂~
uj5u.com熱心網友回復:
這是娛樂代碼,除非ACM、OJ之類的題追求盡可能少的代碼量(RANK能往前排),工程應用中不應該這么寫,這也是靈活性帶來的副作用。uj5u.com熱心網友回復:
這個有意思
uj5u.com熱心網友回復:
感覺是排列組合題。num = 9*8*7*6*5+9*8*7*6+9*8*7+9*8+9
uj5u.com熱心網友回復:
好像應該是從10開始乘uj5u.com熱心網友回復:
一位數 是 10 個兩位數 是 81個 (第一位從 1-9取, 第2位從 1-9 剩下的那個數 以及 0 中取 ) = 9*9
三位數是 648 個 (第一位從 1-9取, 第2位從 1-9 剩下的那個數 以及 0 中取,第三位從..)=9*9*8
四位數是 4536 個 =9*9*8*7
五位數是 27216 個 = 9*9*8*7*6
全部加起來是 32491
uj5u.com熱心網友回復:
我好像錯了一位數 是 9 個
加起來是 9+9*9+9*9*8+9*9*8*7+9*9*8*7*6
=32490
uj5u.com熱心網友回復:
把數字轉換成字串,逐位檢查,沒有相同字符的就是美麗數。這個夠簡潔不?沒有數學運算.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44245.html
標籤:茶館
