首页 > 编程语言 > 详细

20210722-算法入门经典-P183-例7-3-分数拆分

时间:2021-07-22 23:26:12      阅读:18      评论:0      收藏:0      [点我收藏+]

学习参考参见:(https://blog.csdn.net/wyh7280/article/details/44963841)
一、问题描述:输入正整数n,找到所有的正整数x>=y,使得1/k=1/x+1/y。
样例输入:
2
12
样例输出:
2
1/2=1/6+1/3
1/2=1/4+1/4
8
1/12=1/156+1/13
1/12=1/84+1/14
1/12=1/60+1/15
1/12=1/48+1/16
1/12=1/36+1/18
1/12=1/30+1/20
1/12=1/28+1/21
1/12=1/24+1/24
二、知识点:
该题目在进行简单的枚举之前,先进行分析,通过缩放,先确定y的范围,再用等式求解出符合等式条件的x。

  1. 由x≥y,1/x≤1/y,替换等式进行缩放可得y≤2k,以确定y的范围;
  2. 根据y、k,由固定等式,找出符合等式1/k=1/x+1/y的x进行求解。
    三、代码
#include<stdio.h>

int main()
{
	int count;       //计数; 
	int x,y,k;
	
	while(scanf("%d",&k)!=EOF)
	{
		count=0;   //初始化归0; 
		//计数; 
		for(y=k+1;y<=2*k;y++)
			if((k*y)%(y-k)==0)  //等式成立; 
				count++;
		printf("%d\n",count);
		
		for(y=k+1;y<=2*k;y++)
			if((k*y)%(y-k)==0)
			{
				x=(k*y)/(y-k);
				printf("1/%d=1/%d+1/%d\n",k,x,y);
			}
	} 
	return 0;
} 

四、运行结果
技术分享图片

20210722-算法入门经典-P183-例7-3-分数拆分

原文:https://www.cnblogs.com/QQiAnn/p/15046390.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!