为帮助大家能在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))