注意事項:
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...