UVA 10976 暴力列舉

2021-09-11 17:59:36 字數 495 閱讀 6546

給定正整數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];

#include #include #include #include using namespace std;

const int maxn=1e4+5;

int k;

int ans[maxn<<1][3];

int main()

}printf("%d\n",cnt);

for (int i=0;iprintf("1/%d = 1/%d + 1/%d\n",ans[i][0],ans[i][1],ans[i][2]);

}return 0;

}

UVA10976摸魚的暴力列舉初步

我一開始的想法超時了.其實想法也還好,裡面有兩個需要優化的地方.1 通常做法是y 2 k 然後從k開始列舉的.其實想一下也是,從二倍然後加加加 2 我 的順序反了 完全不需要stack啊.開兩個陣列存一下就好了,因為你免不了要輸出sum,所以這個儲存繞不開的 哪怕是y倒著開始.或者 是什麼的.3 暴...

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