多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > POJ 1006 Biorhythms

POJ 1006 Biorhythms

來源:程序員人生   發布時間:2015-01-24 08:56:57 閱讀次數:3409次

POJ 1003,1004,1005 比較簡單,很快就解決了。有個小插曲,剛開始做ACM不太懂,最近提交問題反饋最多的就是Runtime Error,開始我以為是超時,1方面我懷疑是否是Java跑得太慢了,然后去了解發現有些國際大賽推薦用java,那說明java本身是不慢的。另外一方面我懷疑是我程序太爛,每次都很耗時,所以每次遇到Runtime Error問題就去優化代碼,但有時候怎樣優化都不行。在做POJ1005的時候,網上的代碼貼上去AC了,但是我的不行,但兩個程序已完全1樣了,這個時候才發現罪魁罪魁是我提交時總是帶著包名(有時候手動是去了的)。


POJ 1006這個題目我雖然能提交通過,但我的方法更多的算暴力破解。

import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); for(int j=1; j<Integer.MAX_VALUE; j++){ int p = scanner.nextInt() % 23; int e = scanner.nextInt() % 28; int i = scanner.nextInt() % 33; int d = scanner.nextInt(); if(p==⑴ && e==⑴ && i==⑴ && d==⑴) return; for(int number=0; number<=21252+d; ){ if(p == number % 23){ if(e == number % 28){ if(i == number % 33) { if (number-d <= 0) number += 21252; System.out.println("Case "+j+": the next triple peak occurs in "+ (number-d) +" days."); break; } else number += 23*28; } else number += 23; } else number ++; } } } }


解題的關鍵是從復雜錯亂的描寫中抽象出問題的本質,也就是將現象轉化為數學問題。POJ1006這個問題的難點是背后的數學問題――中國剩余定理。

1個數除3余2,除5余3,除7余2??梢杂贸醯葦嫡撝械耐喾匠探M來求解,利用同余的符號,可以將上述問題轉化為下面的同余方程組:
x ≡ 2 (mod 3);
x ≡ 3 (mod 5);
x ≡ 2 (mod 7);
不難看出上述同余方程組的解其實不唯1,由于如果x是1個解,則x+3*5*7*k=x+105k也是該同余方程組的1個解。事實上,從3,5,7兩兩互質可知上述同余方程組的任意兩個解相差105的倍數。如何求出上述同余方程組最小的那個解呢?我們的先人聰明的把問題轉化為以下3個非常特殊的同余方程組的求解
a ≡ 1 (mod 3); b ≡ 0 (mod 3); c ≡ 0 (mod 3);
a ≡ 0 (mod 5); b ≡ 1 (mod 5); c ≡ 0 (mod 5);
a ≡ 0 (mod 7); b ≡ 0 (mod 7); c ≡ 1 (mod 7);
則2a+3b+2c就是原同余方程組的1個解(即2a+3b+2c是被3除余a,被5除余b,被7除余c的數),如果這個數小于105,則即為所求的最小整數解。經過簡單計算可知a可以取70,b可以取21,c可以取15。計算可得2a+3b+2c=233,除以105后的余數23就是所求的最小正整數解。


回到POJ1006這個題目,已知number % 23 = p,number % 28 = e,number % 33 = i
使33*28*a被23除余1,可得5544  = 33*28*6
使23*33*b被23除余1,可得14421 = 23*33*19
使23*28*c被33除余1,可得1288  = 23*28*2
因此有(5544*p + 14421*e + 1288*i) % lcm(23, 28, 33) = number
又由于23,28,33互質,所以lcm(23, 28, 33) = 21252。所以number = (5544*p + 14421*e + 1288*i) % 21252,所求的是number-d,本題求的是最小整數解,避免n為負數需要在number-d<=0的時候加21252。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 综合久青草视频 | 免费91最新地址永久入口 | 欧美激情精品久久久久 | 亚洲在线免费免费观看视频 | 国产在线精品福利大全 | 波多野结衣一级视频 | 国产精品香蕉在线观看不卡 | 亚洲高清日韩精品第一区 | ww在线观视频免费观看w | 日本成a人免费视频 | xxxx欧美| 亚洲欧洲精品视频在线观看 | 夜夜未满十八勿进的爽爽影院 | 亚洲欧美性另类春色 | 国产精品视频一区二区三区 | 精品不卡 | 中文字幕曰韩一区二区不卡 | free hd 性欧美 | 激情97| 福利网站在线观看 | 国外处破女一区二区 | 欧美成人精品一区二三区在线观看 | 国产做出在线 | 传媒麻豆 | 亚洲黄色网址在线观看 | xxx性欧美在线观看 xxx性日本 | 伊人久久成人爱综合网 | 欧美极品videosvideoxxx | 亚洲韩国日本一级二级r级 亚洲韩精品欧美一区二区三区 | 2020久久国产最新免费观看 | 视频一区 国产 | 国产福利在线观看永久免费 | 亚洲精品www | 最近中文字幕高清中文字幕网1 | 国产在线永久视频 | 美女色哟哟 | 欧美18videosex性孕妇 | 大焦伊人| 国产成人a一区二区 | 国产精品一区二区三区高清在线 | 午夜伊人 | 国产成人亚洲综合欧美一部 |