hdu 1271 整數對 詳解

2021-07-03 22:54:02 字數 830 閱讀 2467

注意事項:

1.該數字可以是其本身。例:10本身符合條件。

2.結果中可能出現重複數字,使用陣列時注意。例:12結果可能是兩個11。

假設x為其一解。把x分為三部分:a,b,c。b為要去掉的那個數字,a為b前面的數字,c為b後面的數字。

則 原x=a*10^(k+1)  + b*10^k + c;

變化後y=a*10^k    +      c;

相加得 n=a*11*10^k+ b*10^k +2*c

將過程逆回去

a=n/(11*10^k);

b=(n/10^k)%11;   或b=(n/

10^k)%11-1;(因為2*c可能達到10^k即進製,導致b多加1;但無論哪種情況都可能等於n,所以都需要考慮)

c=(n-a-b)/2;

**如下:

#include#include#include#includeusing namespace std;

int main()

}//有進製情況,只需在b的基礎上-1

b--;

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

}} if (number.empty())

int count = 0;

for (set::iterator it = number.begin(); it != number.end(); ++it, ++count)

cout << *it << (count == number.size() - 1 ? '\n' : ' ');

} return 0;

}

hdu1271 整數對 數學題

很有技巧的一道數學題。本題思路 假設要求的數字為a,去除的為第k位,那麼按照這個規則,將a劃分為三段 高位c,k位b,低位a,則x a 10 k 1 b 10 k c去除後為b a 10 k c,那麼n a b 11a b 10 k 2c 但是由於2c有可能帶來進製,可能會使b進1,但是不會對a出現...

HDU 1271 數論,有點巧妙,改天再研究

假設a中去掉的數在第k 1位,可以把a分成三部分,低位,k,和高位。a a b 10 k c 10 k 1 b a c 10 k n a b 2 a b 10 k c 10 k 11 其中b是一位數,b 10 k不會進製,用10 k除n取整就可以得到b 11c,再用11除,商和餘數就分別是c和b了。...

hdu 1028整數劃分

1 母函式 杭州電子科技大學課件 演算法就是簡單的模擬,1 x x 2 x 3 1 x 2 x 4 x 6 1 x 3 x 6 x 9 1 1 x 2 x 4 x 6 x 1 x 2 x 4 x 6 x 2 1 x 2 x 4 x 6 1 x 3 x 6 x 9 include include in...