NOIP2014-普及组复赛-第二题-比例简化

题目描述 Description

在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902。

不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。

现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,A’/B’ ≥ A/B且A’/B’ - A/B的值尽可能小。

(本题目为2014NOIP普及T2)

输入输出格式 Input/output

输入格式:
输入共一行,包含三个整数A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。
输出格式:
输出共一行,包含两个整数A’,B’,中间用一个空格隔开,表示化简后的比例。

输入输出样例 Sample input/output

样例测试点#1

输入样例:

1498 902 10

输出样例:

5 3

思路:这题可以用两重循环,每次都对两个数取最大公约数,判断A’/B’ ≥ A/B且A’/B’ - A/B的值尽可能小,如果小的话,记录i和j,继续循环,发现还有更小的,记录i和j,直到结束,i和j便是答案。

代码如下:

 1 #include<stdio.h>
 2 int fun(int x,int y)//x,y的最大公约数
 3 {
 4     if(y==0) return x;
 5     else return fun(y,x%y);
 6 }
 7 int main()
 8 {
 9     int k;
10     int a,b,l;//输出
11     int a1,b1;//答案
12     int i,j;//i和j做循环之用
13     double s1,s2,s3;
14     scanf("%d%d%d",&a,&b,&l);
15     s1=a*1.0/b;//变为double的数
16     s3=l*1.0;//变为double的数
17     for(i=1;i<=l;i++)//枚举l次
18         for(j=1;j<=l;j++)
19             if(fun(i,j)==1)//如果最大公约数是1,执行也
20             {
21                 s2=i*1.0/j;//变为int类型的,继续执行
22                 if(s2>=s1&&s2-s1<s3)//A’/B’≥ A/B且A’/B’- A/B的值尽可能小。
23                 {
24                     a1=i;
25                     b1=j;
26                     s3=s2-s1;
27                 }
28             }
29     printf("%d %d\n",a1,b1);
30     return 0;
31 }  
时间: 2024-08-25 10:26:20

NOIP2014-普及组复赛-第二题-比例简化的相关文章

NOIP2011-普及组复赛-第二题-统计单词数

题目描述 Description 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.  现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置.注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章 中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 ). 输入输出格式 Input/out

NOIP2005-普及组复赛-第二题-校门外的树

题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵树. 由于马路上有一些区域要用来建地铁.这些区域用它们在数轴上的起始点和终止点表示.已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分.现在要把这些区域中的树(包括区域端点处的两棵树)移走.你的任务是计算将这些树都移走后,马路上还有多少棵树. 输入输出

NOIP2010-普及组复赛-第二题-接水问题

题目描述 Description 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1.  现在有 n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从 1到 n 编号,i 号同学的接水量为 wi.接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水.当其中某名同学 j 完成其接水量要求 wj后,下一名排队等候接水的同学 k马上接替 j 同学的位置开始接水.这个换人的过程是瞬间完成的,且没有任何水的浪费.即j 同学第

NOIP2001-普及组复赛-第二题-最大公约数和最小公倍数问题

题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数条件:  1.P,A是正整数2.要求P,Q以x0为最大公约数,以y0为最小公倍数.试求:满足条件的所有可能的两个正整数的个数. 输入输出格式 Input/output 输入格式:二个正整数x0,y0输出格式:一个数,表示求出满足条件的P,Q的个数 输入输出样例 Sample input/output 样例测试点#1 输入样例: 3 60

NOIP2002-普及组复赛-第二题-级数求和

题目描述 Description 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. 现给出一个整数K(1<=k<=15),要求计算出一个最小的n:使得Sn>K. 输入输出格式 Input/output 输入格式:一个正整数K.输出格式:一个正整数N. 输入输出样例 Sample input/output 样例测试点#1 输入样例: 1 输出样例: 2 思路:循环到爆,每次加上一个分数,再判断Sn是否大于K,大于输出,否则继续循环. 代码

[NOIP2014普及组]螺旋矩阵

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2017 vijos:https://vijos.org/p/1913 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1811 题目来源:NOIP2014普及组第三题 问题分析:这道题的内容很易懂,而且容易实现,即直接构造出一个螺旋矩阵,输出对应位置即可.这样的方法大概可以过掉50%的数据.但是,对于100

[NOIP2014普及组]比例简化

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2016 vijos:https://vijos.org/p/1912 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1810 题目来源:NOIP2014普及组第二题 问题分析:题目描述很长,归纳起来,大意就是: 在区间[1,L]内求出2个数A’.B’,这两个数满足: 一.gcd(A’,B’)=1,即A’和

[NOIP2014普及组]珠心算测验

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2015 vijos:https://vijos.org/p/1911 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1809 题目来源:NOIP2014普及组第一题 问题分析:作为普及组的第一题,这个难度是可以的,而且有坑点.初步读题,我们会想到这样一种情况: count.in count.out 5 1

守望者的逃离(2007年普及组第3题)| 贪心算法

守望者的逃离(2007年普及组第3题) [问题描述] 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率深藏在海底的那加企图叛变,守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时岛上的所有人都会遇难:守望者的跑步速度为17m/s, 以这样的速度是无法逃离荒岛的.庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点.守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复.