首页 > 其他分享 >十一届蓝桥杯研究生组国赛-循环小数(数论)

十一届蓝桥杯研究生组国赛-循环小数(数论)

时间:2023-06-17 21:04:00浏览次数:31  
标签:循环小数 gcd 组国赛 System long 蓝桥 println out



十一届蓝桥杯研究生组国赛-循环小数

  • 1、题目描述
  • 2、解题思路
  • 3、代码实现


1、题目描述

  已知 S 是一个小于 11 的循环小数,请计算与 S 相等的最简真分数是多少。

  例如 0.3333⋯0.3333⋯ 等于 1331 ,0.1666⋯0.1666⋯ 等于 1661 。

输入描述

  输入第一行包含两个整数 pq,表示 S 的循环节是小数点后第 p 位到第 q位。

  第二行包含一个 q 位数,代表 S 的小数部分前 q 位。

  其中,1≤pq≤10。

输出描述

  输出两个整数,用一个空格分隔,分别表示答案的分子和分母。

输入输出样例

示例 1

输入

1 6
142857

输出

1 7

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

2、解题思路

   这里参考了别的文章说有个定理:纯循环小数转化位分数,就等于循环体部分除以与循环体位数相同的9,例如十一届蓝桥杯研究生组国赛-循环小数(数论)_数据结构

  先解释下输入样例,

1 6
142857

十一届蓝桥杯研究生组国赛-循环小数(数论)_数论_02

  无限循环小数分为纯循环小数,即0.142857142857…,以及混合循环小数:0.114285742857…等。

  我们通过计算与化简说明怎样得到这个结果

针对纯循环小数:

  0.142857142857…,循环体为142857,该循环体有6位,有
十一届蓝桥杯研究生组国赛-循环小数(数论)_蓝桥杯_03

  此时p=1,q=6,循环体位142857

十一届蓝桥杯研究生组国赛-循环小数(数论)_数据结构_04化简得到十一届蓝桥杯研究生组国赛-循环小数(数论)_算法_05

针对混合循环小数:
十一届蓝桥杯研究生组国赛-循环小数(数论)_算法_06

   此时,p=3,q=7

  其实纯循环小数和混合循环小数最后的推导结果是可以合并的,这里为了区分就不合并了,看起来思路还清晰一点。

3、代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int p = scan.nextInt();
        int q = scan.nextInt();
        long decimal = scan.nextLong();

        if(p==1){   //纯循环小数
            //分子
            long x=decimal;
            //分母
            long y=(long)Math.pow(10,q)-1;
//            System.out.println("x="+x);
//            System.out.println("y="+y);
            System.out.println(x/gcd(x,y)+" "+y/gcd(x,y));
        }else{  //混合循环小数
            //取出decimal的前(p-1)位
            String s = String.valueOf(decimal);
            String sub = s.substring(0, p-1);
            long tmp = Long.parseLong(sub);
            //分子
            long x=decimal-tmp;
            //分母
            long y=(long)Math.pow(10,q)-(long)Math.pow(10,p-1);
//            System.out.println("x="+x);
//            System.out.println("y="+y);
            System.out.println(x/gcd(x,y)+" "+y/gcd(x,y));
        }


        scan.close();
    }
    public static long gcd(long a,long b){
        if(b==0){
            return a;
        }
        long max=Math.max(a,b);
        long min=Math.min(a,b);
        return gcd(min,max%min);
    }
}

十一届蓝桥杯研究生组国赛-循环小数(数论)_算法_07,结果为十一届蓝桥杯研究生组国赛-循环小数(数论)_算法_05

十一届蓝桥杯研究生组国赛-循环小数(数论)_java_09

十一届蓝桥杯研究生组国赛-循环小数(数论)_数论_10,结果为十一届蓝桥杯研究生组国赛-循环小数(数论)_数论_11

十一届蓝桥杯研究生组国赛-循环小数(数论)_算法_12

本文参考了如下大佬的解题思路:

  • 蓝桥杯2020年第十一届国赛真题-循环小数
  • 第十一届蓝桥杯(决赛)之循环小数


标签:循环小数,gcd,组国赛,System,long,蓝桥,println,out
From: https://blog.51cto.com/u_15961549/6506209

相关文章

  • 【蓝桥杯集训·周赛】AcWing 第96场周赛
    第一题AcWing4876.完美数一、题目1、原题链接4876.完美数2、题目描述如果一个正整数能够被2520整除,则称该数为完美数。给定一个正整数n,请你计算[1,n]范围内有多少个完美数。输入格式一个整数n。输出格式一个整数,表示[1,n]范围内完美数的个数。数据范围前3个测试点满......
  • 第十四届蓝桥杯大赛软件赛国赛 C/C++ 大学 A 组
    Preface蓝桥杯战俘闪总出列!逆天比赛早上9点要赶到六七公里外的其它学校,因此早上7点就起来了然后坐公交颠着颠着就到了成都工业学院的门口,还刚好看到了lyy佬,就一起溜去考场了到了考场看了一圈好多熟悉的面孔,应该都是集训队的学长啥的,但好多名字还是叫不出来然后好像8点半就能......
  • 第十四届蓝桥杯
    2023第十四届蓝桥杯省赛A.冶炼金属题目大意先放着解题思路先放着神秘代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){cout<<"HelloWorld"<<endl;}......
  • 【蓝桥杯集训·周赛】AcWing 第 95 场周赛
    第一题AcWing4873.简单计算一、题目1、原题链接4873.简单计算2、题目描述给定四个整数x1,y1,x2,y2,请你计算max(|x1−x2|,|y1−y2|)。输入格式第一行包含两个整数x1,y1。第二行包含两个整数x2,y2。输出格式一个整数,表示max(|x1−x2|,|y1−y2|)的值。数据范围前4个测试点......
  • [第五届蓝桥杯省赛C++B组]省赛全题目题解
    文章目录快速分支通道酒精与饮料切面条李白打酒史丰收运算打印图形奇怪的分式六角填数蚂蚁感冒地宫取宝小朋友排队1.题目啤酒和饮料算法标签:枚举题目描述:题目答案:题目思路:题目代码:2.题目切面条来源:第五届蓝桥杯省赛C++B组算法标签递推题目描述:题目答案:题目思路:题目代码:3.题目......
  • [第七届蓝桥杯省赛C++B组]省赛全题目题解
    文章目录快速分支通道煤球数目生日蜡烛凑算式快速排序抽签方格填数剪邮票四平方和交换瓶子最大比例煤球数目题目来源:第七届蓝桥杯省赛C++B组算法标签:递推题目描述:题目答案:题目思路:题目代码生日蜡烛题目来源:第七届蓝桥杯省赛C++B组算法标签:枚举,双指针题目描述:题目答案:题目思路:题目代......
  • 蓝桥杯十一届JavaA组-C++解题
    随便乱写,目前正确性未知C.本质上升序列#include<bits/stdc++.h>usingnamespacestd;boolaccess[4][4];intdfs(intidx,intx,inty){ if(x<0||y<0||x>=4||y>=4) return0; if(access[y][x]) return0; if(idx>=15) return1; intcount=0; access......
  • 230606蓝桥训练
    重现A-数数#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;set<char>cnt;cin>>s;for(autoc:s)cnt.insert(c);cout<<cnt.size()<<"\n";return0;}B-二进制?十......
  • 蓝桥题记 01
    10道题蓝桥杯题记1.单词分析难度简单题目https://www.lanqiao.cn/problems/504/learning/?page=1&first_category_id=1&sort=students_count&second_category_id=3 #include<iostream> usingnamespacestd; intmain() {  //请在此输入您的代码  stringarr;......
  • (贪心+搜索+剪枝)P8801 [蓝桥杯 2022 国 B] 最大数字
    题目描述给定一个正整数 N。你可以对 N 的任意一位数字执行任意次以下2种操作:将该位数字加 1。如果该位数字已经是 9,加 1 之后变成 0。将该位数字减 1。如果该位数字已经是 0,减 1 之后变成 9。你现在总共可以执行 1 号操作不超过 A 次,2 号操作不......