• 2015年第六届蓝桥杯JavaB组省赛试题解析


    题目及解析如下:

    题目大致介绍:

    第一题到第三题以及第六题、第七题是结果填空,方法不限只要得到最后结果就行

    第四题和第五题是代码填空题,主要考察算法基本功和编程基本功

    第八题到第十题是编程题,要求编程解决问题

    第一题  三角形面积

    送分题,每个人都应该会的

     1 // 三角形面积
     2 // answer: 28
     3 
     4 public class t1 {
     5 
     6     public static void main(String[] args) {
     7         System.out.println(64 - 8 - 3 * 4 - 4 * 4);
     8     }
     9     
    10 }

    第二题  立方变自身

     1 // 立方变自身
     2 // 观察下面的现象,某个数字的立方,按位累加仍然等于自身。
     3 // 1^3 = 1 
     4 // 8^3  = 512    5+1+2=8
     5 // 17^3 = 4913   4+9+1+3=17
     6 // ...
     7 // 请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
     8 
     9 // answer: 6
    10 
    11 public class t2 {
    12     
    13     public static void main(String[] args) {
    14         int res = 0;
    15         for(int i = 1; i<99; i++) {
    16             int s = i * i * i;
    17             int sum = calSum(s);
    18             if(sum == i) {
    19                 res++;
    20                 System.out.println(res + " " + i);
    21             }
    22         }
    23         
    24         System.out.println(res);
    25     }
    26 
    27     private static int calSum(int s) {
    28         String str = String.valueOf(s);
    29         int sum = 0;
    30         for(int i = 0; i<str.length(); i++) {
    31             sum += str.charAt(i) - '0';
    32         }
    33         
    34         
    35         return sum;
    36     }
    37     
    38 }

    这个题也算是送分题

    第三题  三羊献瑞

    暴力求解,注意看清楚,别看错了!然后可以推导出某些位置的数,比如下面的三就是1,祥就是9,羊就是0

     1 // 三羊献瑞
     2 
     3 // 观察下面的加法算式:
     4 //
     5 //
     6 //      祥 瑞 生 辉
     7 //  +   三 羊 献 瑞
     8 //-------------------
     9 //   三 羊 生 瑞 气
    10 //
    11 //
    12 // 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
    13 //
    14 // 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容
    15 
    16 // answer: 1085
    17 
    18 public class t3 {
    19 
    20     public static void main(String[] args) {
    21 
    22         for (int a = 1; a <= 9; a++) {
    23             for (int b = 0; b <= 9; b++) {
    24                 if(b!=a)
    25                 for (int c = 0; c <= 9; c++) {
    26                     if(c!=a&&c!=b)
    27                     for (int d = 0; d <= 9; d++) {
    28                         if(d!=c&&d!=b&&d!=a)
    29                         for (int i = 1; i <= 9; i++) {
    30                             if(i!=d&&i!=c&&i!=b&&i!=a)
    31                             for (int j = 0; j <= 9; j++) {
    32                                 if(j!=i&&j!=d&&j!=c&&j!=b&&j!=a)
    33                                 for (int k = 0; k <= 9; k++) {
    34                                     int num1 = a * 1000 + b * 100 + c * 10 + d;
    35                                     int num2 = i * 1000 + j * 100 + k * 10 + b;
    36                                     int res = num1 + num2;
    37                                     if(k!=j&&k!=i&&k!=d&&k!=c&&k!=b&&k!=a)
    38                                     for(int q=0; q<=9; q++) {
    39                                         int aim = i * 10000 + j * 1000 + c * 100 + b * 10 + q;
    40                                         if(q!=k&&q!=j&&q!=i&&q!=d&&q!=c&&q!=b&&q!=a)
    41                                         if(res == aim) {
    42                                             System.out.println(num1 + " + " + num2 + " = " + res + " aim: " + aim);
    43                                         }
    44                                     }
    45                                 }
    46                             }
    47                         }
    48                     }
    49                 }
    50             }
    51         }
    52 
    53     }
    54 
    55 }

    第四题  循环节长度

     1 // 循环节长度
     2 
     3 // 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
     4 // 比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位。
     5 // 下面的方法,可以求出循环节的长度。
     6 //
     7 //
     8 // 请仔细阅读代码,并填写划线部分缺少的代码。
     9 
    10 public class t4 {
    11 
    12     public static int f(int n, int m) {
    13         n = n % m;
    14         Vector v = new Vector();
    15 
    16         for (;;) {
    17             v.add(n);
    18             n *= 10;
    19             n = n % m;
    20             if (n == 0)
    21                 return 0;
    22             if (v.indexOf(n) >= 0) {
    23                 return v.size() - v.indexOf(n); // 填空
    24             }
    25         }
    26     }
    27 
    28     public static void main(String[] args) {
    29 
    30         for (int i = 1; i <= 17; i++) {
    31             for (int j = 1; j <= 17; j++) {
    32                 if (i % j != 0) {
    33                     System.out.println(i + " " + j + " " + (double)i/j + " " + f(i, j));
    34                 }
    35             }
    36         }
    37         
    38 
    39     }
    40 
    41 }

    第五题 九数组分数

    很简单的暴力法,注意使用全排列套路:

     1 // 九数组分数
     2 
     3 // 1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
     4 // 下面的程序实现了该功能,请填写划线部分缺失的代码。
     5 
     6 // 答案如下:
     7 // 5832 17496
     8 // 5823 17469
     9 
    10 public class t5 {
    11     public static void test(int[] x) {
    12         // 测试函数  检测是否符合条件
    13         int a = x[0] * 1000 + x[1] * 100 + x[2] * 10 + x[3];
    14         int b = x[4] * 10000 + x[5] * 1000 + x[6] * 100 + x[7] * 10 + x[8];
    15         if (a * 3 == b)
    16             System.out.println(a + " " + b);
    17     }
    18 
    19     public static void f(int[] x, int k) {
    20         if (k >= x.length) {
    21             test(x);
    22             return;
    23         }
    24 
    25         // 1, 2, 3, 4, 5, 6, 7, 8, 9
    26         
    27         for (int i = k; i < x.length; i++) {
    28             // 下面是全排列的套路代码  你应该背下来
    29             {
    30                 int t = x[k];
    31                 x[k] = x[i];
    32                 x[i] = t;
    33             }
    34             f(x, k + 1);
    35             {
    36                 int t = x[k];
    37                 x[k] = x[i];
    38                 x[i] = t;
    39             }
    40         }
    41     }
    42 
    43     public static void main(String[] args) {
    44         int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    45         // 用数组x来保存这个分数
    46         // 前四个是分子 后六个是分母
    47         f(x, 0);
    48     }
    49 }

    第六题 加法变乘法

     1 // 我们都知道:1+2+3+ ... + 49 = 1225
     2 //
     3 // 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
     4 //
     5 // 比如:
     6 // 1+2+3+...+10*11+12+...+27*28+29+...+49= 2015
     7 // 就是符合要求的答案。
     8 //
     9 //
    10 // 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
    11 //
    12 // 注意:需要你提交的是一个整数,不要填写任何多余的内容
    13 
    14 // answer:
    15 // 16
    16 
    17 // i j        m n
    18 // i*j + m*n - (i + j + m + n) == 2015 - 1225
    19 
    20 public class t6 {
    21     public static void main(String[] args) {
    22         
    23         for(int i=10; i<=50; i++) {
    24             int j = i+1;
    25             for(int m=j+2; m<=50; m++) {
    26                 int n = m + 1;
    27                 if(i*j + m*n - (i + j + m + n) == 2015 - 1225) {
    28                     System.out.println(i + " " + j);
    29                 }
    30             }
    31             
    32             
    33         }
    34         
    35     }
    36 }

    第七题  牌型种数

     1 // 牌型种数
     2 // 小明被劫持到X赌城,被迫与其他3人玩牌。
     3 //
     4 // 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
     5 //
     6 // 这时,小明脑子里突然冒出一个问题:
     7 //
     8 // 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
     9 
    10 // 思路: 13 堆牌,每堆 4 个,每堆可选 0 到 4 个,只要总数为 13 即可
    11 // 答案: 3598180
    12 
    13 public class t7 {
    14     
    15     
    16     public static int res;
    17     public static void dfs(int type, int sum) {
    18         if(sum > 13 || type > 13) {
    19             res += 0;
    20             return;
    21         }
    22         if(type == 13 && sum==13) {
    23             res += 1;
    24             return;
    25         }
    26         for(int i=0; i<=4; i++){
    27             dfs(type+1, sum+i);
    28         }
    29     }
    30     
    31     
    32     public static void main(String[] args) {
    33         dfs(0, 0);
    34         System.out.println(res);
    35     }
    36     
    37 }

    第八题  饮料换购

    第一道编程题,很简单:

     1 import java.util.Scanner;
     2 
     3 // 饮料换购
     4 // 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。
     5 //
     6 // 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。
     7 //
     8 // 输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
     9 // 输出:一个整数,表示实际喝完的饮料数
    10 //
    11 // 例如:
    12 // 用户输入:
    13 // 100
    14 // 程序应该输出:
    15 // 149
    16 //
    17 // 用户输入:
    18 // 101
    19 // 程序应该输出:
    20 // 151
    21 
    22 public class t8 {
    23 
    24     private static Scanner input;
    25 
    26     public static int f(int n) {
    27         int res = n;
    28         while (n >= 3) {
    29             n -= 2;
    30             res += 1;
    31         }
    32         
    33         
    34         return res;
    35     }
    36 
    37     public static void main(String[] args) {
    38         input = new Scanner(System.in);
    39         System.out.println(": ");
    40         int n = input.nextInt();
    41         System.out.println(f(n));
    42 
    43     }
    44 
    45 }

    第九题  垒骰子

    第十题  生命之树

    第九题和第十题有一定难度,不做研究了,时间没有那么多。。。。 

  • 相关阅读:
    Pro/Toolkit示例之一:异步启动ProE
    Formatted MessageBox/AfxMessageBox
    Pro/Toolkit示例之二:同步Dll程式
    模拟按钮控件BN_CLICKED消息事件
    详解ProToolkit注册文件
    C++函数指针
    Message Basic
    C++指针之间的赋值与转换规则总结
    CString&CStringA&CStringW之间的相互转换
    Devexpress组件之XtraBars.PopupMenu的使用
  • 原文地址:https://www.cnblogs.com/wyb666/p/10787363.html
Copyright © 2020-2023  润新知