NOI上看到的幾個小學奧數


7647:余數相同問題
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
已知三個正整數 a,b,c。

現有一個大於1的整數x,將其作為除數分別除a,b,c,得到的余數相同。

請問滿足上述條件的x的最小值是多少?

數據保證x有解。

輸入
一行,三個不大於1000000的正整數a,b,c,兩個整數之間用一個空格隔開。
輸出
一個整數,即滿足條件的x的最小值。
樣例輸入
300 262 205
樣例輸出
19

解:設:a=k1*x+r;b=k2*x+r;c=k3*x+r,消去r:

a-b=(k1-k2)*x

b-c=(k2-k3)*x

a-c=(k1-k3)*x

現在有3個數n1,n2,n3求它們的最小公約數。可以繼續把它們互相做減法,得到一系列數m1,m2,m3……集合n中的數和m中的數都能被最小公倍數整除,所以我們可以繼續做減法,直到這些數足夠小之后,取較小的兩個的最小公約數。例如題目中的數據,300-262=38;262-205=57;57-38=19,19已經是一個質數了,所以它就是答案,如果還不是質數可以繼續做減法。下一個題是蓄水池問題就不說了,從小落下的病根,看這個就想吐。

7649:我家的門牌號
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
我家住在一條短胡同里,這條胡同的門牌號從1開始順序編號。

若所有的門牌號之和減去我家門牌號的兩倍,恰好等於n,求我家的門牌號及總共有多少家。

數據保證有唯一解。

輸入
一個正整數n。n < 100000。
輸出
一行,包含兩個正整數,分別是我家的門牌號及總共有多少家,中間用單個空格隔開。
樣例輸入
100
樣例輸出
10 15

解:設最大門牌號y,則有平均門牌號(y+1)/2,所以門牌號之和為y(y+1)/2。

設我家門牌號x,依題意有y(y+1)/2-2x=n。即:y(y+1)=2n+4x。

因x>0所以有:y(y+1)>2n。

例如題中數據,n=100,則可知y>=14。再利用1<=x<=y即可解出一個解。

7650:不定方程求解
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
給定正整數a,b,c。求不定方程 ax+by=c 關於未知數x和y的所有非負整數解組數。

輸入
一行,包含三個正整數a,b,c,兩個整數之間用單個空格隔開。每個數均不大於1000。
輸出
一個整數,即不定方程的非負整數解組數。
樣例輸入
2 3 18
樣例輸出
4

解:方程等價於x/b+y/a=c/(a*b)。設y=0則有x=c/a;設x=0則有y=c/b。

於是0<=x<=c/a且0<=y<=c/b。

由此可知,由於c/a整除b時x才為整數,所以:c/a/b+1(0這個解)就是解個數,或者c/b/a+1都一樣。

7652:乘積最大的拆分
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
將正整數n拆分為若干個互不相等的自然數之和,問如何拆分可以使得它們的乘積最大?

輸入
一個正整數n。n <= 10000。
輸出
一行,包含若干個互不相等的自然數——乘積最大的一種拆分方案。這些自然數需從小到大輸出,兩個自然數之間用單個空格隔開。
樣例輸入
15
樣例輸出
2 3 4 6

這個題應該是這樣解,因為拆的份數越多(除了1之外)乘的結果越大,所以從2開始拆,不讓相等那就拆成2、3、4……,最后如果還差點,那也沒有辦法,因為前面都是挨個來的,所以只能加到最后一個數上面。如題目中15,拆成2、3、4、5之后還剩下一個,那就拆2、3、4、6。

7655:回文數個數
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
不超過n位的正整數中,有多少個回文數?

輸入
一個正整數n,n <= 10。
輸出
一個整數,即回文數個數。
樣例輸入
5
樣例輸出
1098

這個題就不搗鼓方程了,所謂回文數就是正着反着看都是一樣的,例如ABA,當然1位的話怎么看都一樣。所以有:

1位數的時候1-9一共9個。

2位數的時候11-99一共9個。

然后遞推就可以了:

1、向1位數兩邊各添一位相等的數,例如1兩邊都加2就是212,顯而易見由於首位0的限制,只能有9種情況。但是,這時要注意,中間的那一位可以為0了,所以一共有9*(9+1)種情況。

2、向2位數兩邊各添加一位相等的數,情況與上面1相同,也有90種。

所以有結論:1、2位9種,3、4位90種,5、6位900種……題目讓求和,那么1位有9種,2位18種,3位108種,4位198種……

以上,剩下再看到有趣的再寫。

 

7657:連乘積末尾0的個數
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
給定兩個正整數a,b(a < b)。求連乘積:

a×(a+1)×(a+2)×...×(b-1)×b

的末尾有多少個0?

輸入
一行,包括兩個正整數a,b。a < b <= 10000
輸出
一個整數,即連乘積末尾0的個數。
樣例輸入
11 56
樣例輸出
11

  這個題比上一個李白的酒(通項:0.5*2^(n-1))有意思,從a乘到b,關注末尾的數字:0是怎么來的?考慮這樣幾種情況:

1、a個位為0:自然增加一個結尾0。

2、a個位為5:遇到下一個偶數(就是a+1)才得到一個結尾0或00或000…………,但根據題意a<b它一定會遇到。

3、a個位為1、2、3、4、6、7、8、9:奇數咋也乘不出來10來,偶數遇到5才行。

所以,這個題目需要檢查一些特殊的情況:a=25,b=26和a=25,b=28結尾0個數是不一樣的。當然,題目中所給的數字很容易判斷:

11-56一共跨越了15、20、25、30、35、40、45、50、55一共9個可以造成末尾0的數字,而其中25、50含有2個5,所以結果是11個。而如果a和b跨度較短,則需要檢測是否有足夠的偶數消耗掉了5。當然,在廣泛的范圍內,也需要證明5可以被消耗完成,否則就只能挨個乘結尾為偶數和5的數字了。下一個題目分蘋果就很簡單了,n個小盆友每個人得到不同數目蘋果,至少需要多少個?記得當初老太辦公室一叔叔1+2+3……+100都難的我好半天。汗顏啊……

7827:質數的和與積
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
兩個質數的和是S,它們的積最大是多少?

輸入
一個不大於10000的正整數S,為兩個質數的和。
輸出
一個整數,為兩個質數的最大乘積。數據保證有解。
樣例輸入
50
樣例輸出
589

從手動解的角度來看……這個題就只好有依據(兩個乘數越接近積越大,n^2>(n+1)(n-1)這個。從s/2開始,s/2±2、4、6……)的蒙了,好吧,叫嘗試法。沒說兩個質數不能相等吧?25、25不行,23、27不行,21、29不行,19、31看來就是了。從編程的角度來看,先計算sqrt(s)之前的篩子,然后也是類似的過程。

7828:最大公約數與最小公倍數
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
兩個正整數的最大公約數是G,最小公倍數是L,它們的和最小是多少?

輸入
兩個不大於10000的正整數G和L,中間用單個空格隔開。數據保證L是G的倍數。
輸出
一個正整數,即最小的和。
樣例輸入
14 280
樣例輸出
126

這個題說的是兩數的乘積為G*L,問它們的最小和。可以得到兩個等式:

1、a+b=x

2、a*b=G*L

將2帶入1,可得:a+G*L/a=x,即a^2-x*a+G*L=0。其有解的充要條件就是x^2>=4*G*L了。

例如題目數據,x>=sqrt(4*14*280)即x>125.2。編程求來說應該沒什么難度,記得向上取整是ceil函數。但是手動就需要手工開方……好吧,早就還給老師了,我們這樣:先質因數分解為:4*14*14*4*5,就剩下4*14*sqrt(5)了,如果還不記得,那只好繼續猜:2^2<5<3^2,所以是2.?,接下來就忘了,可以二分試值。

7829:神奇序列求和
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 65536kB
描述
有一個序列,初始時只有兩個數x和y,之后每次操作時,在原序列的任意兩個相鄰數之間插入這兩個數的和,得到新序列。舉例說明:

初始:1 2

操作1次:1 3 2

操作2次:1 4 3 5 2

……



問操作n次之后,得到的序列的所有數之和是多少?

輸入
三個整數x,y,n,相鄰兩個數之間用單個空格隔開。0 <= x <= 5, 0 <= y <= 5, 1 < n <= 10。
輸出
一個整數,即最終序列中所有數之和。
樣例輸入
1 2 2
樣例輸出
15

 這個問題很有規律,觀察下一級時上一次的和被利用了幾次。把和作為一個整體即可得到規律。

7830:求小數的某一位
查看
提交
統計
提問
總時間限制: 1000ms 內存限制: 65536kB 
描述
分數a/b化為小數后,小數點后第n位的數字是多少?
輸入
三個正整數a,b,n,相鄰兩個數之間用單個空格隔開。0 < a < b < 1001 <= n <= 10000。
輸出
一個數字。
樣例輸入
1 2 1
樣例輸出
5

這個就編程來說似乎不算難,雖然用double也無法達到精度,但實際上實現起來甚至無需實現一個高精度除法:先求余,然后用余數乘10、100、1000、10000之類的(要看要求多少位了,其實每次都乘10代碼最簡單)就可以做出來了。筆算的話,我覺得應該是循環小數,否則就沒有意思了。

7831:計算星期幾
查看
提交
統計
提問
總時間限制: 1000ms 內存限制: 65536kB 
描述
假設今天是星期日,那么過ab天之后是星期幾?
輸入
兩個正整數a,b,中間用單個空格隔開。0 < a <= 100, 0 < b <= 10000。
輸出
一個字符串,代表過ab​天之后是星期幾。
其中,Monday是星期一,Tuesday是星期二,Wednesday是星期三,Thursday是星期四,Friday是星期五,Saturday是星期六,Sunday是星期日。
樣例輸入
3 2000
樣例輸出
Tuesday

這個問題在上一個問題的路上越走越遠。編程計算就是pow然后%7。手工計算的話,是利用冪的性質,把底數向7靠攏,以期消去冪指數的思路。

后面幾個問題就不寫了,沒多大意思。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM