博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA10976 Fractions Again?!
阅读量:7064 次
发布时间:2019-06-28

本文共 965 字,大约阅读时间需要 3 分钟。

即便是暴力枚举,也需要进行数学推导,尽可能减小枚举的范围。

问题链接:。入门练习题,用C语言编写程序。

题意简述:输入正整数k,求满足1/k=1/x+1/y并且x≥y的正整数对x和y。

问题分析:先枚举y,因为x≥y,其范围小。其他要点如下:

1.因为1/k=1/x+1/y且x>0,所以1/k>1/y,得y>k;

2.x≥y,有1/x1/y,且1/k=1/x+1/y,所以1/k-1/y1/y,得y2k;

3.这样只需要y在k+1到2k之间枚举试算即可;

4.因为1/k=1/x+1/y,得x=ky/(y-k)。

程序说明:枚举试算过程中,必须满足ky/(y-k)是整数,并且x≥y。由于还要统计满足条件的整数对有多少,并且还有先输出,所以使用了数组ansx[]和ansy[]。不使用数组的话,就需要算两遍,第1遍先统计数量,第2遍计算x和y。

AC的C语言程序如下:

/* UVA10976 Fractions Again?! */#include 
#define MAXN 10000int main(void){ int k, x, y, end, sum, ansx[MAXN], ansy[MAXN]; while(scanf("%d", &k) != EOF) { sum=0; end = 2 * k; for(y=k+1; y<=end; y++){ if((y * k) % (y - k) == 0){ x = (y * k) / (y - k); if(x >= y) { ansx[sum] = x; ansy[sum] = y; sum++; } } } printf("%d\n",sum); for(x=0; x

转载于:https://www.cnblogs.com/tigerisland/p/7564362.html

你可能感兴趣的文章
java入门第一季5、6
查看>>
[转载] 闻一多——七子之歌
查看>>
针对tomcat日志乱码问题
查看>>
免费的协作和协同办公软件平台onlyoffice轻松部署
查看>>
WiFi覆盖下的生活 享受便利的同时 别忘记了安全
查看>>
关于ios 8 7 下的模态窗口大小的控制 代碼+場景(mainstoryboard)( Resizing UIModalPresentationFormSheet )...
查看>>
Linux软件包的管理--YUM
查看>>
Axis2发布webservice(1)--0配置发布
查看>>
Java Web笔记 – Servlet中的Filter过滤器的介绍和使用 编写过滤器
查看>>
我奋斗了18年,不是为了和你一起喝咖啡
查看>>
gearman简单介绍
查看>>
《Typecript 入门教程》 3、接口
查看>>
jsp的几种跳转比较
查看>>
用oracle查询当前数据库中的所有表
查看>>
决心书
查看>>
git 从版本控制中删除文件及.gitignore的用法
查看>>
cacti安装
查看>>
Spark核心概念
查看>>
Kali***(二)之被动信息收集——搜索引擎
查看>>
组策略参考文档1-共享打印机
查看>>