题目
源地址:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1917
理解
直接暴力做,最多有n-1种可能,每种可能全都尝试一遍,看看能不能找到合适的解,定eps为1e-4,幸运1A。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <vector>
#include <list>
#include <cctype>
#include <algorithm>
#include <utility>
#include <math.h>
using namespace std;
#define LL long long int
#define MAXN 10000+10
LL xbuf[MAXN];
LL ybuf[MAXN];
int main()
{
LL k;
while(~scanf("%lld",&k))
{
LL y = 1;
LL cnt = 0;
memset(xbuf, 0, sizeof(xbuf));
memset(ybuf, 0, sizeof(ybuf));
for(y=1; y<=2*k; y++)
{
double x = 1.0 / (1.0/k - 1.0/y);
LL xInt = (LL)(x+0.5);
if(x>0 && fabs(x-xInt)<1e-4)
{
xbuf[cnt] = xInt;
ybuf[cnt] = y;
cnt++;
}
}
printf("%lld\n", cnt);
for(int i=0; i<cnt; i++)
{
printf("1/%lld = 1/%lld + 1/%lld\n", k, xbuf[i], ybuf[i]);
}
}
}
更新日志
- 2014年10月27日 已AC。