亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
樓主: DNFCF
打印 上一主題 下一主題

[算法] 變態(tài)的算法題 [復(fù)制鏈接]

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
41 [報(bào)告]
發(fā)表于 2011-05-04 23:35 |只看該作者
smilence

論壇徽章:
1
天秤座
日期:2014-04-27 07:42:20
42 [報(bào)告]
發(fā)表于 2011-05-05 17:04 |只看該作者
本帖最后由 A.com 于 2011-05-05 17:30 編輯

剛才看到有人說(shuō)二叉樹(shù)不給用遞歸,想起來(lái)這個(gè)數(shù)字的變化其實(shí)是可預(yù)期的,譬如把某位的0變成1,那么整個(gè)數(shù)字就是N+1,無(wú)論這個(gè)0在什么位置,他變成1的結(jié)果都是相同的。也就是說(shuō)只有組合相關(guān)性沒(méi)有排列相關(guān)性。又因?yàn)檫@21位數(shù)里面至少要有一位是9(沒(méi)有9的組合不可能大于10^20),所以實(shí)際需要遍歷的總次數(shù)是10個(gè)數(shù)字的20位組合減去9個(gè)以上9的組合{:3_190:}


最暴力的辦法就是寫就是20層循環(huán),前8層0-9,后12層0-8,最里面別忘了加上一個(gè)9^21。才282529536481次循環(huán)就行了,

論壇徽章:
0
43 [報(bào)告]
發(fā)表于 2011-05-05 18:06 |只看該作者
沒(méi)有9的組合不可能大于10^20

11 * 8^21= 101,457,092,405,402,533,888

論壇徽章:
1
天秤座
日期:2014-04-27 07:42:20
44 [報(bào)告]
發(fā)表于 2011-05-06 08:38 |只看該作者
11 * 8^21= 101,457,092,405,402,533,888
KBTiller 發(fā)表于 2011-05-05 18:06



    呃,算錯(cuò)了。。{:3_185:}

論壇徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
45 [報(bào)告]
發(fā)表于 2011-05-06 20:14 |只看該作者
本帖最后由 l2y3n2 于 2011-05-06 20:16 編輯

隨便用Python寫了個(gè)窮舉的,用時(shí)間正好3分鐘、Python自帶的大數(shù)運(yùn)算、程序也沒(méi)有優(yōu)化過(guò)。
就是窮舉9、8、7、……、0的個(gè)數(shù),然后對(duì)比結(jié)果。

用C的話時(shí)間上應(yīng)該還是沒(méi)問(wèn)題的

~$ time ./f.py
449177399146038697307
128468643043731391252

real    2m54.915s
user    2m54.871s
sys     0m0.012s

  1. #! /usr/bin/env python
  2. # -*- coding: UTF-8 -*-

  3. def check(value, nums):
  4.     tmp = [0] * 10
  5.     for c in str(value):
  6.         tmp[ord(c) - ord('0')] += 1
  7.     for i in range(0, 10):
  8.         if tmp[i] != nums[i]:
  9.             return False
  10.     return True


  11. def action(exps, nums, n, leftn, value, idx):
  12.     value += exps[idx] * leftn
  13.     nums[idx] = leftn
  14.     if len(str(value)) < n:
  15.         return

  16.     if (idx == 0):
  17.         if (check(value, nums)):
  18.             print(value)
  19.         return

  20.     for i in range(0, leftn + 1):
  21.         if len(str(value)) <= n:
  22.             action(exps, nums, n, leftn - nums[idx], value, idx - 1)
  23.         value -= exps[idx]
  24.         nums[idx] -= 1


  25. def main(n):
  26.     exps = [i ** n for i in range(0, 10)]
  27.     nums = [0] * 10
  28.     action(exps, nums, n, n, 0, 9)


  29. if __name__ == '__main__':
  30.     main(21)


復(fù)制代碼

論壇徽章:
0
46 [報(bào)告]
發(fā)表于 2011-05-13 13:10 |只看該作者
用了40多秒
KBTiller 發(fā)表于 2011-05-03 22:07



    想請(qǐng)問(wèn)你具體怎么做的?我想的是對(duì)21位數(shù)進(jìn)行枚舉,但是那樣很崩潰,太慢了

論壇徽章:
0
47 [報(bào)告]
發(fā)表于 2011-05-13 20:32 |只看該作者
本帖最后由 KBTiller 于 2011-05-19 10:34 編輯
想請(qǐng)問(wèn)你具體怎么做的?我想的是對(duì)21位數(shù)進(jìn)行枚舉,但是那樣很崩潰,太慢了
oiacm 發(fā)表于 2011-05-13 13:10



    基本是按照10樓的那種思路做的
    只對(duì)21位數(shù)的各種組合驗(yàn)算
    提供組合大體上是這樣實(shí)現(xiàn)的

    選擇某位數(shù)字( 1 , 1 );    //選第1位數(shù)字,從1開(kāi)始


void 選擇某位數(shù)字(const int 第幾位 , const  int 起始的數(shù)字 )
{
    if (  第幾位 >  21  ){
        //驗(yàn)算
        return ;
    }   
    for (int 數(shù)字 = 起始的數(shù)字 ; 數(shù)字 < 10 ; 數(shù)字 ++  ){
        選擇某位數(shù)字 ( 第幾位 + 1 , ( 第幾位 == 1 ? 0 : 數(shù)字 )  ) ;  //第2位及以后各位從0開(kāi)始選擇  
    }   
}

   就是第一位1~9。第二位及以后都從0開(kāi)始選數(shù)字,但要保證第二位以后是個(gè)有序的數(shù)字序列

   此外用到了:各個(gè)數(shù)字的21次方事先計(jì)算好,以后查表計(jì)算各個(gè)數(shù)字的21次方的和;9的個(gè)數(shù)不能太多

   我過(guò)幾天會(huì)把詳細(xì)的解法寫出來(lái)
==============================
這個(gè)有點(diǎn)聰明反被聰明誤了
最初,并沒(méi)有考慮第一位不可以為0
但這樣多了一個(gè)21位都為0的情況
為了表達(dá)的更自然
后來(lái)改進(jìn)成第一位不能為0
后面各位有序
但這樣實(shí)際上多了若干重復(fù)的組合(見(jiàn)41樓)

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2015-08-30 06:20:00
48 [報(bào)告]
發(fā)表于 2011-05-14 02:17 |只看該作者
暈死,這里哪有用到乘法啊,分明就只有加法。

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2015-08-30 06:20:00
49 [報(bào)告]
發(fā)表于 2011-05-14 02:20 |只看該作者
我給個(gè)思路吧。

不用去算數(shù)。

char N[21]

用循環(huán)的方式。

先計(jì)算 21 一個(gè) 1 的結(jié)果,
然后是  20 個(gè) 1 , 一個(gè) 2 ...
依次類推

在每次便利中,尋找一個(gè)可能的 21 個(gè)數(shù)字的排序使得結(jié)合的大叔是一樣大的。

大數(shù)用 long long 就可以表示了吧?

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2015-08-30 06:20:00
50 [報(bào)告]
發(fā)表于 2011-05-14 02:21 |只看該作者
利用  99 乘法表,直接查表不通過(guò)計(jì)算。

暈死,我馬上寫一個(gè),我對(duì)這個(gè)數(shù)字的確切大小非常感興趣。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP