整數對
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...