蓝桥杯官网 试题 PREV-261 历届真题 循环小数【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python

举报
红目香薰 发表于 2022/05/31 18:38:22 2022/05/31
【摘要】 ​ 为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。今年的最大目标就是能为【一亿技术人】创造更高的价值。资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s​编辑C++#include <bits/stdc++.h>using names...

 为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。

今年的最大目标就是能为【一亿技术人】创造更高的价值。


资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

编辑

C++

#include <bits/stdc++.h>

using namespace std;
long gcdMax(long x, long y);

int main()
{
    long a, b;
    long L, _L; //L存放循环体
    long F = 0; //F存放非循环体部分
    long X = 0, Y = 0; //X为分子,Y为分母,最终输出结果
    long gcd = 1; //最大公约数

    cin >> a >> b;
    cin >> _L;
    F = _L/pow(10, b-a+1);
    X = _L - F;
    Y = pow(10, b) - pow(10, a-1);
    gcd = gcdMax(X, Y);
    X /= gcd;
    Y /= gcd;
    cout << X << " " << Y << endl;

    return 0;
}

/*辗转相除法求最大公约数*/
long gcdMax(long x, long y)
{
    long temp = 1;
    if(x > y) {
        temp = x;
        x = y;
        y = temp;
    }//x位较小值,y位较大值

    while((y%x) != 0){
        temp = y%x;
        y = x;
        x = temp;
    }
    return(x);
}

C

#include<stdio.h>
#include<math.h>

int gcd(int a,int b){
    return a%b?gcd(b,a%b):b;
}

int main(){
	int p,q;
	long long decimal,num,deno,factor;
	scanf("%d%d",&p,&q);
	scanf("%I64d",&decimal);
	num=decimal-(int)floor(decimal/pow(10,q-p+1));
	deno=pow(10,q)-pow(10,p-1);
	factor=gcd(num,deno);
	printf("%I64d %I64d",num/factor,deno/factor);
	return 0;
}

Java

import java.util.Scanner;
public class Main {
	public long gys(long b,long c)
	{
		long a;
		while(b!=0)
		{
			a=c%b;
			c=b;
			b=a;
		}
		return c;
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner in=new Scanner(System.in);
		Main s=new Main();
		long a=in.nextInt();
		long b=in.nextInt();
		long c=in.nextInt();
		long d=b-a+1;
		long e=10,e1=1;
		for(int i=1;i<d;i++)
		{
			e=e*10;
		}
		for(int i=1;i<=a-1;i++)
		{
			e1=e1*10;
		}
		long x=c%e;
		long x1=c/e;
		long i=1;
		long g=e*i-i;
		while(g%x!=0)
		{
			i++;
			g=e*i-i;
		}
		g=g/x*e1;
		long g1=0,g2=x1,g3=e1;
		g3=s.gys(g2,g3);
		long i1=x1/g3;
		g1=e1/g3;
		g3=s.gys(g1,g);
		g3=(g*g1)/g3;
		i=i1*(g3/g1)+i*(g3/g);
		g3=s.gys(i,g);
		System.out.println(i/g3+" "+g/g3);
	}

}

Python

#欧几里得算法(辗转相除法) 求最大公约数
def gcd(a,b):
    if a < b:
        a,b = b,a
    elif a==b:
        return 1
    while b!=0:
         temp = a % b
         a = b
         b = temp
    return a
   
p,q  = map(int,input().split())
s = input()
fz = int(s[p-1:q])
fm = int("9"*(q-p+1))
fz_1 = fz/gcd(fz,fm)
fm_1 = fm/gcd(fz,fm)
if p==1:
    print("%.0f %.0f"%(fz_1,fm_1))
else:
    qx = int(s[:p-1])
    fz_1 = int(fz_1)
    fm_1 = int(fm_1)

    fz_2 = (fz_1+qx*fm_1)/gcd(fz_1+qx*fm_1,fm_1*10**(p-1))
    fm_2 = fm_1*10**(p-1)/gcd(fz_1+qx*fm_1,fm_1*10**(p-1))
    print("%.0f %.0f"%(fz_2,fm_2)) 


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。