【刷题小记66】分拆数

【转载请注明出处】http://blog.csdn.net/mingyong_blog/article/details/39252363

描述


现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y.

输入
第一行输入一个整数n,代表有n组测试数据。

接下来n行每行输入一个正整数k

输出

按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合

思路分析

关键是怎么处理1/k=1/x+1/y,由于对除法不好处理,这个式子中有3个除法,所以转化成乘法的形式处理,转成成xy=ky+kx.

结合x>=y,易知y的最小值为k+1,根据y的值,求出x的值。x=ky/(y-k).随着y的值不断增大,x的值不断减小,直到x<y时,break.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	int Cases;
    int k;
    int y;
    scanf("%d",&Cases);
    while(Cases--)
    {
		scanf("%d",&k);
        for(y=k+1;;y++)
        {
			int x=(k*y)/(y-k);
            if(x<y) break;
            if((x*y)==k*(x+y))
				printf("1/%d=1/%d+1/%d\n",k,x,y);
        }
    }
}
时间: 2024-10-10 17:50:30

【刷题小记66】分拆数的相关文章

leecode刷题(8)-- 两数之和

leecode刷题(8)-- 两数之和 两数之和 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 思路: 这道题其实很简单,我们可以直接用暴力搜索的方法,设置双重

LeetCode刷题 1. Two Sum 两数之和 详解 C++语言实现 java语言实现

Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: Given nums = [2, 7, 11, 15]

【刷题小记23】取石子

描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子.游戏的规则是这样的.设有一堆石子,数量为N(1<=N<=1000000),两个人轮番取出其中的若干个,每次最多取M个(1<=M<=1000000),最先把石子取完者胜利.我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么? 输入 第一行是一个正整数n表示有n组测试数据 输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔.

【刷题小记28】大数阶乘

描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 分析:很明阶乘的数比较大,用int会溢出,所以采用int数组的方法,用数组的元素来保存每一位,根据乘法的相乘规则,用数组元素的每一位去乘迭代 #include <iostream> #include <cstring> #include <cstdlib> using na

LintCode刷题小记491

题目: 判断一个正整数是不是回文数. 回文数的定义是,将这个数反转之后,得到的数仍然是同一个数. 样例: 11, 121, 1, 12321 这些是回文数. 23, 32, 1232 这些不是回文数. 分析: 回文数就是反转后和自身一样,可利用java中StringBuffer中reverse()这一函数进行操作. 下面给出代码: 1 public class Solution { 2 /** 3 * @param num a positive number 4 * @return true i

【刷题小记71】独木桥上的旅行

描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量.我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数.现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量.根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入 第一行输入s,表示测试数据的组数: 每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为

【刷题小记48】小明的调查作业

描述 小明的老师布置了一份调查作业,小明想在学校中请一些同学一起做一项问卷调查,聪明的小明为了实验的客观性,想利用自己的计算机知识帮助自己.他先用计算机生成了N个1到1000之间的随机整数(0<N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成"去重"与"排序"的工作. 输入 输入有2行,第1行为1个正整数,表示所生成的随机数的个数: N

【刷题小记56】阶乘因式分解

描述 给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m. 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数 随后的s行, 每行有两个整数n,m. 输出 输出m的个数. 思路: n!的结果非常大,先将n!的结果求出在做是不可行的,根据n!=1*2*3*...*n*(n-1) 依次对阶乘中的每个数判读,是否含有素数m以及含有多少个<=> while((i%key==0)&&i/key) #

leetcode 刷题(2)--- 两数相加

给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 解法: class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2