UVA10976摸魚的暴力列舉初步

2021-08-15 19:31:45 字數 1297 閱讀 6441

我一開始的想法超時了......

其實想法也還好,裡面有兩個需要優化的地方.....

(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即可。在這需要用到乙個判斷...