0105 蓝桥杯真题08
创始人
2024-04-12 19:39:05

 

 

 

 

 

 

 

 

 

 

 

 

/*
 * 中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。
 * 它的前几项是:0、2、4、8、12、18、24、32、40、50 ...
 * 其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。
 * 以下的代码打印出了大衍数列的前 100 项。

    for(int i=1; i<100; i++)
    {
    if(________________) //填空
    System.out.println(i*i/2);
    else
    System.out.println((i*i-1)/2);
    }

 *请填写划线部分缺失的代码。通过浏览器提交答案。
 */
public class _031大衍数列 {
    public static void main(String[] args) {
        for(int i=1; i<100; i++)
        {
        if(i % 2 == 0) //填空
        System.out.println(i*i/2);
        else
        System.out.println((i*i-1)/2);
        }
    }
}
 

/*
 * 数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事。其中许多方法都涉及无穷级数。
 * 如图中所示,就是一种用连分数的形式表示的圆周率求法。
 * 下面的程序实现了该求解方法。实际上数列的收敛对x的初始值 并不敏感。
 * 结果打印出圆周率近似值(保留小数点后4位,并不一定与圆周率真值吻合)。
 *      double x = 111;
 *   for(int n = 10000;n >= 0;n--){
 *       int i = 2 * n + 1;
 *       x = 2 + (i*i / x);
 *   }
 *   
 *   System.out.println(String.format("%.4f",_______));
 *   
 * 思路
 * 极限 -->当n=0时,i=1,x=2+1/x,与图相比多了1,减去,即Π=4/(x-1)
 */
public class _032圆周率 {
    public static void main(String[] args) {
        double x = 111;
           for(int n = 10000;n >= 0;n--){
               int i = 2 * n + 1;
               x = 2 + (i*i / x);
           }
          System.out.println(String.format("%.4f",4/(x-1)));
    }
}

/*
 * 上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:
 * 1/4 乘以 8/5
 * 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)
 * 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
 * 对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?
 * 请写出所有不同算式的个数(包括题中举例的)。
 * 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。
 * 但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!
 * 
 * 注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。
 * 
 * 思路
 * 写出等式
 */
public class _033奇怪的分式 {
    private static int count;

    public static void main(String[] args) {
        for(int a = 1;a < 10;a++) {
            for(int b = 1;b < 10;b++) {
                for(int c = 1;c < 10;c++) {
                    for(int d = 1;d < 10;d++) {
                        if (a == b || c == d) {//分子分母相同跳过
                            continue;
                        }
                        if ((10*a+c)*b*d == (10*b+d)*a*c) {//条件
                            count++;
                        }
                    }
                }
            }
        }
        System.out.println(count);
    }
}

import java.util.HashSet;
import java.util.Set;

/*
 * A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
 * 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
 * 请填写出所有符合要求的排列中,字典序最小的那个。
 * 例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
 * 
 * 请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
 * 
 * 思路
 * 全排列+检查(set去重)
 * public int lastIndexOf(int ch):
 * 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
 * 
 */
public class _034扑克序列 {
    public static void main(String[] args) {
        char[] a = {'A','A','2','2','3','3','4','4'};
        f(a,0);
        
        //输出set
        for (String s : set) {
            System.out.println(s);
        }
    }

    //去重
    static Set set = new HashSet<>();
    
    private static void f(char[] a, int k) {
        //出口
        if (k == a.length) {
            String s = new String(a);//把字符数组转成字符串
            if (check(s)) {//检查
                //System.out.println(s);
                set.add(s);
            }
        }
        
        //全排列
        for(int i = k;i < a.length;i++) {
            char temp = a[k];
            a[k] = a[i];
            a[i] = temp;
            
            f(a, k+1);
            
            temp = a[k];
            a[k] = a[i];
            a[i] = temp;
        }
    }

    //检查
    private static boolean check(String s) {
        if (s.lastIndexOf('A') - s.indexOf('A') == 2 &&
            s.lastIndexOf('2') - s.indexOf('2') == 3 &&
            s.lastIndexOf('3') - s.indexOf('3') == 4 &&
            s.lastIndexOf('4') - s.indexOf('4') == 5) {
            return true;
        }else {
            return false;
        }
    }
}

import java.util.Scanner;

/*
 * 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
 * 每个小朋友都把自己的糖果分一半给左手边的孩子。
 * 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
 * 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
 * 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
 * 
 * 输入格式
 * 程序首先读入一个整数N(2< N< 100),表示小朋友的人数。
 * 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
 * 
 * 输出格式
 * 要求程序输出一个整数,表示老师需要补发的糖果数。
 * 
    样例输入
    3
    2  2  4
    样例输出
    4
 */
public class _035分糖果 {
    public static void main(String[] args) {
        //输入
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for(int i = 0;i < n;i++) {
            a[i] = sc.nextInt();
        }
        
        int count = 0;//补发次数
        while (true) {
            int temp = a[0];
            for(int i = 0;i <= n-2;i++) {
                a[i] -= a[i] / 2;//给一半糖果
                a[i] += a[i + 1] / 2;//获得右边的一半糖果
                if (a[i] % 2 != 0) {//是奇数,补发
                    count++;
                    a[i]++;
                }
            }
            
            //最后一位的糖果
            a[n-1] -= a[n-1] / 2;
            a[n-1] += temp / 2;
            
            if (a[n-1] % 2 != 0) {
                count++;
                a[n-1]++;
            }
            
            if (check(a,n)) {//相等就输出并结束循环
                System.out.println(count);
                return;
            }
        }
    }

    //检查糖果数量是否相等
    private static boolean check(int[] a,int n) {
        int temp = a[0];
        for(int i = 1;i < n;i++) {
            if (a[i] != temp) {
                return false;
            }
        }
        return true;
    }    
}

 

 

 

相关内容

热门资讯

中国石油大学(北京)宿舍条件怎... 中国石油大学(北京)宿舍条件怎么样—中国石油大学(北京)宿舍图片大学宿舍就是我们的第二个家,中国石油...
中国矿业大学(北京)宿舍条件怎... 中国矿业大学(北京)宿舍条件怎么样—中国矿业大学(北京)宿舍图片大学宿舍就是我们的第二个家,中国矿业...
山西中医学院宿舍条件怎么样,山... 山西中医学院宿舍条件怎么样—山西中医学院宿舍图片大学宿舍就是我们的第二个家,山西中医学院宿舍条件怎么...
山西财经大学宿舍条件怎么样,山... 山西财经大学宿舍条件怎么样—山西财经大学宿舍图片大学宿舍就是我们的第二个家,山西财经大学宿舍条件怎么...
忻州师范学院宿舍条件怎么样,忻... 忻州师范学院宿舍条件怎么样—忻州师范学院宿舍图片大学宿舍就是我们的第二个家,忻州师范学院宿舍条件怎么...