2020年太原市职工职业技能竞赛-程序员场赛

2022-06-17 15:00:27 浏览数 (2)

题目一

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!!因为 36 * 495 = 396 * 45 = 17820 类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54 假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0) 能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。注意:只提交一个表示最终统计种类数的数字,提交解答过程和计算结果图。

操作内容:
代码语言:javascript复制
package com.jeesite.modules.aaa;

public class Test {

    public static void main(String[] args) {
        int temp=0;//计算总数
        for(int a=1;a<10;a  )
        {
            for(int b=1;b<10;b  )
            {
                if(b!=a)
                {
                    for(int c=1;c<10;c  )
                    {
                        if(c!=a&&c!=b) {
                            for(int d=1;d<10;d  )
                            {
                                if(d!=a&&d!=b&&d!=c)
                                {
                                    for(int e=1;e<10;e  )
                                    {
                                        if(e!=a&&e!=b&&e!=c&&e!=d)
                                        {
                                            int flag1=a*10 b;
                                            int flag2=c*100 d*10 e;
                                            int flag3=a*100 d*10 b;
                                            int flag4=c*10 e;
                                            if(flag1*flag2==flag3*flag4)
                                            {
                                                temp  ;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println(temp);
    }


}

此题运行结果如下: 142

题目二

福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:

ABCDE * ? = EDCBA

他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”

华生:“我猜也是!”

于是,两人沉默了好久,还是没有算出合适的结果来。

请你利用计算机的优势,找到破解的答案。

把 ABCDE 所代表的数字写出来。

思路:循环遍历每个字母可能的情况。

操作内容:

代码语言:javascript复制
package com.jeesite.modules.aaa;

import java.util.ArrayList;
import java.util.List;

public class Test2 {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        int n = 5;
        for (int i = 0; i < n; i  ) {
            list.add(0);
        }

        create(list, n);

    }

    // 产生一个五位数,每位数字都不相同

    private static void create(List<Integer> list, int n) {
        if (n <= 0) {
            jisuan(list);
            return;
        }

        for (int i = 1; i <= 9; i  ) {
            if (!list.contains(i)) {
                list.set(list.size() - n, i);
            } else {
                continue;
            }
            create(list, n - 1);
            list.set(list.size() - n, 0);
        }

    }

    // 计算是否符合条件
    private static void jisuan(List<Integer> list) {
        if (list.get(4) > list.get(0)) {//产生的数字只有个位比万位大,才有可能符合条件,所以其他情况不用做计算
            int result = list.get(0) * 10000   list.get(1) * 1000   list.get(2)
                    * 100   list.get(3) * 10   list.get(4);

            int b = fanzhuan(result);

            if (b % result == 0) {
                System.out.println(result);
            }
        }

    }

    // 反转数字
    private static int fanzhuan(int i) {
        String s = i   "";
        String ss = "";
        for (i = 0; i < s.length(); i  ) {
            ss = s.charAt(i)   ss;
        }

        return Integer.parseInt(ss);
    }
}

此题运行结果如下: 21978

题目三

Description

在舞蹈比赛中,三名舞者可以组成一支舞队,现在一共有N M名舞者,其中有N名舞者擅长芭蕾,剩下M名舞者擅长街舞,这些舞者要参加舞蹈竞赛,比赛要求每支舞队至少有一名擅长芭蕾和一名擅长街舞的舞者,通过编程计算,N M名舞者最多可以组成多少支舞蹈队?

Input

输入两个整数M,N,其中1<N,M<10000000

Output

最多可以组成的舞蹈队数

Sample Input 1

10 160

Sample Output 1

10

操作内容:

代码语言:javascript复制
网页提交版本:


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int m, n;
        do {
            Scanner in = new Scanner(System.in);
            n = in.nextInt();
            m = in.nextInt();
        } while (n <= 1 && m >= 10000000);
        int count = 0;
        while (n > 0 && m > 0) {
            n--;
            m--;
            if (n > m) {
                n--;
            } else {
                m--;
            }
            if (n >= 0 && m >= 0) {
                count  ;
            }
        }
        System.out.println(count);
    }
}

本地运行代码:

代码语言:javascript复制
package com.jeesite.modules.aaa;

import java.util.Random;
import java.util.Scanner;

public class Test3 {

    public static void main(String[] args) {
        int m, n;
        do {
            Scanner in = new Scanner(System.in);
            System.out.println("请输入第一个数据(1<N):");
            n = in.nextInt();
            System.out.println("请输入第二个数据(M<10000000):");
            m = in.nextInt();
        } while (n <= 1 && m >= 10000000);
//        System.out.println(N " " M);
        int count = 0;
        while (n > 0 && m > 0) {
            n--;
            m--;
            if (n > m) {
                n--;
            } else {
                m--;
            }
            if (n >= 0 && m >= 0) {
                count  ;
            }
        }
        System.out.println("N M名舞者最多可以组成" count "支舞蹈队");
    }
}

此题运行结果如下:

0 人点赞