当前位置:首页 > 题解目录 > 正文内容

【题解】真分数(2019青岛市程序设计竞赛)

亿万年的星光5年前 (2021-04-16)题解目录4605

【描述】

真分数,指的是分子比分母小的分数,真分数的分数值小于1。

给出n个正整数,任取两个数分别作为分子和分母组成真分数。

求能组成多少不同值的真分数。

【输入】

第一行是一个正整数n。

第二行是n个不同的正整数ai,相邻两个整数之间用单个空格隔开。

【输出】

一个整数,即最简真分数组合的个数。

【样例输入输出】

fraction.in

fraction.out

4

1 2 3 4

5

 

    样例说明:共组成6个真分数:1/2,1/3,1/4,2/3,2/4,3/4。

但是这6个真分数有5个不同的值:1/2,1/3,1/4,2/3,3/4。因为1/2和2/4的值相同.

【数据范围】

100%的数据:1<=ai<=1000,n<=600。

【来源】

2019年青岛市程序设计竞赛试题(初中组)1T


【题目分析】

  • 题目比较简单,模拟法求解即可 

  • 题目保证输入的数据不同,也就是不存在1/1这样的数

  • 可以先把数据排序,然后进行组合。

  • 对于组合后的数据如果存在重复的进行筛选即可

  • 筛选的过程可以用最大公约数和桶排的方法进行筛选


【参考答案】

#include<cstdio>
#include<algorithm> 
using namespace std;
int fz[601],fm[601]; //分子和分母
int n;//
int flagfz[601],flagfm[601]; //标记数组
int devisor; //最大公约数 
//求最大公约数 
int gcd(int a,int b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
} 
int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&fz[i]);
		fm[i]=fz[i];
	}
	sort(fz,fz+n);
	sort(fm,fm+n); //分子分母排序 
	//处理数据
	int k=0,q=0; 
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			devisor=gcd(fz[i],fm[j]);
			//printf("%d /%d\n",fz[i],fm[j]);
			flagfz[k]=fz[i]/devisor;
			flagfm[k]=fm[j]/devisor;//约分 
			printf("%d/%d\n",flagfz[k],flagfm[k]);
			//约分后的数据看看以前有没有出现过
			for(int p=0;p<k;p++){
				if(flagfz[p]==flagfz[k] && flagfm[p]==flagfm[k])	
				q++; //找到重复的数据 
			}
			k++; //计数器加1 
		} 
	} 
	printf("%d",k-q); 
	return 0; 
}





    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】区间数位个数

    2.区间数位个数(digit.cpp)【描述】给定整数n和整数k,求出1~n中所有数的每一位数字中,出现数字k的次数。【输入】第一行是两个个整数n和k【输出】一个整数表示答案。【样例输入输出】ligh...

    【题解】分糖果问题

    【题解】分糖果问题

    【题目描述】一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:每个孩子不管得分多少,起码分到一个糖果。任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)给定一个数组 a...

    【题解】链表操作

    【题目描述】给定一个N个数的数组,M次操作,每次操作为下列操作之一。求最后的数组。操作1:在第X个数之后插入一个数Y。操作2:删除第X个数。操作3:对区间[X,Y]进行排序。操作4:对区间[X,Y]进...

    【题解】数字的选择

    【题目描述】有n个非负整数,请从这n个非负整数中,选出m个数,在不改变m个数的顺序的情况下,构成一个新数列,要求该数列的中相邻两个数的差值绝对值的和尽可能小。请问,这个最小的差值绝对值的和是多少?比如...

    【题解】同学的等待

    【题目描述】同学们下课后去食堂,每个人都需要一段时间去点菜。然而,某些同学点菜时间太长了。同学们对于等待很烦躁:他们希望,能尽量少的花时间等待。(同学数<=100000),(0<=点菜耗时...

    【题解】移动路线

    【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一...