(數學,拆分數字,找規律)整數對 HDOJ

2021-09-30 14:21:28 字數 1491 閱讀 3079

整數對

problem description

gardon和小希玩了乙個遊戲,gardon隨便想了乙個數a(首位不能為0),把它去掉乙個數字以後得到另外乙個數b,他把a和b的和n告訴了小希,讓小希猜想他原來想的數字。不過為了公平起見,如果小希回答的數雖然不是a,但同樣能達到那個條件(去掉其中的乙個數字得到b,a和b之和是n),一樣算小希勝利。而且小希如果能答出多個符合條件的數字,就可以得到額外的糖果。

所以現在小希希望你編寫乙個程式,來幫助她找到盡可能多的解。

例如,gardon想的是a=31,b=3 告訴小希n=34,

小希除了回答31以外還可以回答27(27+7=34)所以小希可以因此而得到乙個額外的糖果。

input

輸入包含多組資料,每組資料一行,包含乙個數n(1<=n<=10^9),檔案以0結尾。

output

對於每個輸入的n,輸出所有符合要求的解(按照大小順序排列)如果沒有這樣的解,輸出」no solution.」

sample input

34 152

21 0

sample output

27 31 32

126 136 139 141

no solution.

author

gardon

思路:

將乙個數字分成三部分,即s1 = a*10^(n+1)+ b*10^(n)+ c

假設每次我們取走的數字是b

那麼取走後的數字就為 s2 = a*10^(n)+ c

n = s1 + s2 = a*11*10^(n) + b*10^(n) + 2*c;

n / (10^n) = a*11 + b

這裡要注意一下,a和b不能同時為零,為什麼呢?

a 為零,b不為零:取的數字為最高位數字

a不為零,b為零 :取的數字就是零

同時為零:沒有這樣的數字

c是肯定小於10^n的,但是2*c就不確定了

2*c >= 10^n :就會產生進製,影響a*11+b的值,又因為a*11+b除以11,並不會影響a的值(進製後,b加一,即使加一後b為10,除以11,商也不會有影響),所以,進製與否,a值都不會受影響,這時候,b值就要減去一,再去算c的值

2*c <10^n:不產生進製,將a和b的值算出來,再去求c的值

如果將abc帶入n的公式,與n相等話,那麼s1 就是乙個滿足條件的數字,存起來

# include 

# include

# include

# include

using

namespace

std;

int main(void)

b--;

if(b>=0 && a+b != 0)

}if(st.empty())

cout

<<"no solution."

cout

0;}

數學找規律 number

題幹去內網找。計算方法是可以通過找規律的方法找出來的,但是正規的式子是 f i,k x 1,x mid k,p c ax 1,k x 1 c ax,k x 1 其中 p表示i在二進位制下1的個數,ax表示二進位制下第x高的1所在為代表的2的冪次。可以證明出f i.k f i 1,k 因此滿足的答案連...

數字難題(找規律)

contest 多校訓練 985專場 problem g 985的數字難題 time limit 1 sec memory limit 128 mb submit 257 solved 86 submitstatusweb board description 985有n個數,已知每次操作可以將其中不...

拆素數 找規律,數學

牛牛現在有乙個包含 n 個正整數的陣列 a 牛牛可以將其中的每個數 a i 都拆成若干個和為 a i 的正整數,牛牛想知道拆後 也可以乙個數都不拆 這個陣列最多能有多少個素數。對於1,它本來就不是素數,最多能拆成0個素數的和 對於2和3,最多能拆成1個素數的和 4 2 2,最多能拆成2個素數的和 5...