我一開始的想法超時了......
其實想法也還好,裡面有兩個需要優化的地方.....
(1)通常做法是y<2*k
然後從k開始列舉的.. 其實想一下也是,從二倍然後加加加
(2)我 的順序反了-
完全不需要stack啊.... 開兩個陣列存一下就好了,因為你免不了要輸出sum,所以這個儲存繞不開的
哪怕是y倒著開始... 或者 是什麼的...
(3)暴力列舉....!!! 其實x不用列舉的,只要除法就好了
並且不會有精度損失!!!!!!!因為是int所以除得盡啊 .......多慮了
ac的**
#include#includeusing namespace std;
int main()
} cout << i<< endl;
for (int m= 0; m < i; m++)
cout << "1/" << k << " = 1/" << a[m] << " + 1/" << b[m] << endl;
} return 0;
}///只要列舉y,然後找到符合條件的x就可以了,從頂向下找.....
/// 而不是,面向資料開始分析... orz
/// 從題目中來.. 從題目中列舉.... ///
//x*(y - k) == k*y;
// 倒序輸出完全不是問題......但是這個方法似乎複雜了一倍= =
// sum完全不是問題... 用陣列存一下就好了
然後超時的....
stack別看了吧= =只能說我 從x開始找大概也沒錯
數學啊,,, 還是多分析了的好
#include#includeusing namespace std;
int main()
{ double k;
while (cin >> k)
{ stacks;
int cnt = 0;
double x = 2 * k, y = 2 * k;
while (x <= k*k + k)
{ for (y = x; y > 0; y--)
/// 據說 會有精度損失?= =.... 這是列舉?....
// 多用演算法的思想考慮問題.....
//要列舉... 而不是自己找...讓計算機幫你找,它不怕乙個乙個乙個的找的
{if (x*y == k*x + k*y)
{cnt++;
s.push(y); s.push(x);
//cout <<"1/"<
UVA 10976 暴力列舉
給定正整數k 1 k 10000 找出所有正整數 x y,使得1 k 1 x 1 y.首先,x,y肯定為整數,所以x,y的取值範圍不能小於k,即左區間為k 1,因為x y,1 x 1 y,即1 k 1 y 1 y,所以,1 k 2 y,所以2k y,所以y的取值範圍就出來了,k 1,2 k incl...
分數除法 Uva 10976
題目描述 輸入正整數k,找到所有的正整數x y,使得1 k 1 x 1 y 樣例輸入212 樣例輸出 21 2 1 6 1 3 1 2 1 4 1 4 81 8 1 156 1 13 1 8 1 84 1 14 1 8 1 60 1 15 1 8 1 48 1 16 1 8 1 36 1 18 1 ...
UVA 10976 分數拆分
題目描述 既然要求找出所有的x y,列舉物件自然就是x y了。可問題在於,列舉的範圍如何?從1 12 1 156 1 13可以看出,x可以比y大很多。難道要無休止地列舉下去?當然不是。由於x y,有 因此 即y 2k。這樣,只需要在2k範圍之內列舉y,然後根據y嘗試計算出x即可。在這需要用到乙個判斷...