2011年全国软件大赛模拟题及参考答案(Java高职组)

简介:

2011年全国软件大赛模拟题及参考答案(Java高职组)


不是官方的答案,如有不妥,请指出。

2011 模拟 java 高职

注意:

本套模拟题主要模拟命题形式与考核范围。真实竞赛题的数量、难度可能与此套模拟题有差异。

说明:

本试卷包含两种题型:“代码填空”与“程序设计”。

填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不多于一条语句(即不能出现分号)。

编程题要求选手设计的程序对于给定的输入能给出正确的输出结果。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。

 

1.      代码填空(满分3分)

以下程序打印出0~9的数字,请补充缺少的代码。

public class MyTest

{

    public static void f(int begin, int end)

    {

        ___________; if(begin>end) return;

        System.out.println(begin);

        f(begin+1, end);   

    }

    public static void main(String[] args)

    {

        f(0,9);

    }

}

 

2.      代码填空(满分4分)

如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡,但也可以在不借助任何其它变量的情况下完成。试填写缺失的代码。

    a = a ^ b;

    b = _________; b = a ^ b;

    a = _________; a = a ^ b;

 

3.      代码填空(满分3分)

 

许多人都曾经玩过“拍七”游戏。规则是:大家依次从1开始顺序数数,数到含有7或7的倍数的要拍手或其它规定的方式表示越过(比如:7,14,17等都不能数出),下一人继续数下面的数字。违反规则者受罚。下面的程序模拟这个过程,拍7的情况输出“*”,请完善之。

    for(int i=1; i<100; i++)

    {

        if(i % 7 == 0)

            printf("*/n");

        else if(___________________) i%10 == 7 || i/10==7

            printf("*/n"); 

        else

            printf("%d/n", i);

    }

 

 

4.      代码填空(满分5分)

下面的静态方法的目的是求出某个日期是该年度的第几天。试完善之。

如果传入:year=1980,month=1, day=1

则返回 1

如果传入:year=1980,month=2, day=1

则返回 32

public static int getDayOfYear(int year, int month, int day)

{

        int [][]days=_____________________;{{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30}}

        int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;

        int sum = day ;

        for(int i=0;i<month;i++)    {

            sum += days[flag][i];

        }      

        return sum;    

}

 

5.      代码填空(满分2分)

下列方法的目的是,找出1~n之间所有的平方数。试补全缺失的代码。

当n=10时,输出结果是:

1 4 9

当n=100时,输出结果是:

1 4 9 16 25 36 49 64 81

 

    public static void showSqure(int n)

    {

        for(int i=0; i<n; i++)

        {

            for(int j=1; j<=i; j++)

            {

                if(i==_____________) System.out.print(i + " "); j*j

            }

        }

       

        System.out.println();

    }

6.      代码填空(满分9分)

(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:

                 1

               1   1

              1  2  1

            1  3   3   1

          1  4   6   4   1

        1  5  10  10   5   1

 

下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。

    public static int f(int m, int n)

    {

        if(m==0) return 1;

        if(n==0 || n==m) return 1;

        return __________________________; f(m-1,n-1)+f(m-1,n)

    }

 

7.      代码填空(满分4分)

 

下面的代码将数组中的元素的位置颠倒过来:

比如:原来的元素是 [1,2,3]

则颠倒后变为:[3,2,1]

public static void reverse(int[] arrs)

{

       

for (int i = 0, j = arrs.length - 1; i <_________ ; i++, j--) arrs.length/2

{

        int temp = arrs[i];

        arrs[i] = arrs[j];

        arrs[j] = temp;

    }

}

 

8.      程序设计(满分15分)

从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:

输入数字2,则程序输出:

1 2

4 3

输入数字3,则程序输出:

1 2 3

8 9 4

7 6 5

输入数字4, 则程序输出:

1  2   3   4

12  13  14  5

11  16  15  6

10   9  8   7

 

import java.util.Scanner;

public class MyTest {

    public static void main(String[] args)

    {

       Scanner in = new Scanner(System.in);

       int n = in.nextInt();

       int value[][] = new int[n][n];

      

       int direction = 1; // 1向右,-1向左,2向上,-2向下

       int row=0;

       int col=0;

       for(int i=0;i<n*n;i++){

           if(value[row][col]==0){

              value[row][col]=i+1;

              if(direction==1){ // 向右

                  if(col+1<n && value[row][col+1]==0){

                     col++;

                  }else{

                     direction=-2;

                     row++;

                  }

              } // 向下

              else if(direction==-2){

                  if(row+1<n && value[row+1][col]==0){

                     row++;

                  }else{

                     direction=-1;

                     col--;

                  }

              }

              else if(direction==-1){

                  if(col-1>=0 && value[row][col-1]==0){

                     col--;

                  }else{

                     direction=2;

                     row--;

                  }

              }

              else{

                  if(row-1>=0 && value[row-1][col]==0){

                     row--;

                  }else{

                     direction=1;

                     col++;

                  }

              }

           }

       }

       for(int i=0;i<n;i++){

           for(int j=0;j<n;j++){

              if(j == 0)

                  System.out.print(value[i][j]);

              else{

                  System.out.print(" "+value[i][j]);

              }

           }

           System.out.println();             

       }

    }

}

 

9.      程序设计(满分9分)

从键盘输入一个日期,格式为yyyy-M-d

要求计算该日期与1949年10月1日距离多少天

例如:

用户输入了:1949-10-2

程序输出:1

用户输入了:1949-11-1

程序输出:31

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Scanner;

public class MyTest {

    public static void main(String[] args)

    {

       Scanner in = new Scanner(System.in);

       String date = in.next();

       DateFormat df = new SimpleDateFormat("yyyy-M-d");

       String oldDate = "1949-10-1";

       try{

           Date d = df.parse(date);

           Date d2 = df.parse(oldDate);

           System.out.println((d.getTime()-d2.getTime())/(24*3600*1000));

       }catch(Exception e){

           System.out.println("輸入的不是有效日期");

       }

    }  

}

 

 

10. 程序设计(满分20分)

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

 

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:

[82962, 75933, 63954, 61974]

其中数字的先后顺序可以不考虑。

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

public class MyTest {

    // 保存查找到的环

    static List<List<Integer>> allList = new ArrayList<List<Integer>>();

    public static void main(String[] args)

    {

          

           // 遍历所有的数字

           for(int a=0;a<=9;a++){

                  for(int b=0;b<=a;b++){

                         for(int c=0;c<=b;c++){

                                for(int d=0;d<=c;d++){

                                       for(int e=0;e<=d;e++){

                                              int temp = a*10000+b*1000+c*100+d*10+e;

                                              List<Integer> list = findRing(temp);

                                              if(list!=null){

                                                     allList.add(list);

                                              }

                                       }

                                }

                         }

                  }

           }

           // 输出结果

           for(List<Integer> list:allList){

                  System.out.print("[");

                  for(int i=0;i<list.size();i++){

                         int temp = list.get(i).intValue();

                         System.out.print(temp);

                         if(i!=list.size()-1)

                                System.out.print(",");

                  }

                  System.out.print("]");

                  System.out.println();

           }

    }

    /*

     * 得到最大数,根据32321得到最大数是33221

     */

    static int getMax(int number){

           String temp = String.valueOf(number);

           char tempCharArray[] = temp.toCharArray();

           Arrays.sort(tempCharArray);

           StringBuffer sb = new StringBuffer(new String(tempCharArray));

           sb.reverse();

           for(int i=0;i<5-sb.length();i++){

                  sb.append('0');

           }

           return Integer.parseInt(sb.toString());

    }

    /*

     * 得到最小数,根据32321得到最小数是12233

     */

    static int getMin(int number){

           String temp = String.valueOf(number);

           char tempCharArray[] = temp.toCharArray();

           Arrays.sort(tempCharArray);

           return Integer.parseInt(new String(tempCharArray));

    }

    /*

     * 根据某个数找环

     */

    static List<Integer> findRing(int number){

           List<Integer> list = new ArrayList<Integer>();

           int temp=number;

           while(true){

                  temp = getNext(temp);

                  // 一定存在于环中

                  if(temp==0 || exists(temp)){

                         return null;

                  }

                  int index = find(list,temp);

                  if(index!=-1){

                         return list.subList(index,list.size());

                  }else{

                         list.add(temp);

                  }

           }

    }

    /*

     * 得到最大值-最小值

     */

    static int getNext(int number){

           return getMax(number)-getMin(number);

    }

    /*

     * 查找某个数字是否在某个链表中

     */

    static int find(List<Integer> list,int number){

           int index = -1;

           for(int i=0;i<list.size();i++){

                  if(list.get(i).intValue()==number){

                         index = i;

                         break;

                  }

           }

           return index;

    }

    /*

     * 是否存在于已有的环中

     */

    static boolean exists(int number){

           for(List<Integer> list:allList){

                  if(find(list,number)>-1)

                         return true;

           }

           return false;

    }

}

11. 程序设计(满分 9 分)

当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。

该校验的过程:

1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。

3、将奇数位总和加上偶数位总和,结果应该可以被10整除。

例如,卡号是:5432123456788881

则奇数、偶数位(用红色标出)分布:5432123456788881

奇数位和=35

偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。

最后35+35=70 可以被10整除,认定校验通过。

 

请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。

比如,用户输入:356827027232780

程序输出:成功

 

import java.util.Scanner;

 

public class MyTest {

       public static void main(String[] args)

       {

              System.out.println("请输入卡号:");

              Scanner in = new Scanner(System.in);

              String cardNumber = in.next();

              int sum1 = 0;

              // 处理奇数位

              for(int i=cardNumber.length()-1;i>=0;i=i-2){

                     sum1 += cardNumber.charAt(i)-'0';

              }

              int sum2 = 0;

              // 处理偶数位

              for(int i=cardNumber.length()-2;i>=0;i=i-2){

                     int temp = (cardNumber.charAt(i)-'0')*2;

                     if(temp>9){

                            temp = temp - 9;

                     }

                     sum2 += temp;

              }

              if((sum1+sum2)%10==0){

                     System.out.println("成功");

              }else{

                     System.out.println("失败");

              }

       }

}


相关文章
|
1月前
|
Java 开发者 微服务
Java企业应用软件系统架构演变史
Java企业应用软件系统架构演变史
28 0
|
6月前
|
算法 Java 测试技术
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(2)
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(2)
38 0
|
5天前
|
JavaScript Java 测试技术
基于Java的库存管理软件的设计与实现(源码+lw+部署文档+讲解等)
基于Java的库存管理软件的设计与实现(源码+lw+部署文档+讲解等)
23 1
|
24天前
|
关系型数据库 Java 开发工具
Java入门高频考查基础知识9(15问万字参考答案)
本文探讨了Spring Cloud的工作原理,包括注册中心的心跳机制、服务发现机制,以及Eureka默认的负载均衡策略。同时,概述了Spring Boot中常用的注解及其实现方式,并深入讨论了Spring事务的注解、回滚条件、传播性和隔离级别。文章还介绍了MySQL的存储引擎及其区别,特别关注了InnoDB如何实现MySQL的事务处理。此外,本文还详细探讨了MySQL索引,包括B+树的原理和设计索引的方法。最后,比较了Git和SVN的区别,并介绍了Git命令的底层原理及流程。
32 0
Java入门高频考查基础知识9(15问万字参考答案)
|
24天前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
49 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
6月前
|
存储 人工智能 Java
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)
370 0
|
3月前
|
Java
Java_画图软件
Java_画图软件
19 0
|
5月前
|
存储 前端开发 Java
Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架:学生考试Web应用程序
Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架。它们提供了一种结构化的方法,用于处理Web请求、生成动态内容和管理Web应用程序的组件。以下是关于Java Web框架和Spring MVC的详细解释,以及如何使用Spring MVC创建一个简单的Web应用程序的示例代码。
|
5月前
|
JSON 监控 安全
处理大规模数据流:使用Java编写公司聊天监控软件的数据处理模块
在今天的数字时代,企业越来越依赖聊天公司监控软件来确保员工的上网安全、保护敏感信息,并监测内部通信。为了更有效地处理和分析这些大规模数据流,公司通常需要自定义的数据处理模块。在本文中,我们将探讨如何使用Java编写这样的模块,同时确保跨平台部署。
172 0
|
5月前
|
监控 算法 Java
局域网监控软件调度算法Java和Python的简单示例
提供了两个Java与Python的示例,包括设备类、监控软件类、添加设备、监控设备和调度监控任务的方法。监控设备的操作可以根据实际需求进行扩展。
428 0