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("失败");

              }

       }

}

时间: 2024-11-05 12:38:31

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

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

非官方标注答案,如有不妥,请指出. 2011 模拟 java 本科 注意: 本套模拟题主要模拟命题形式与考核范围.真实竞赛题的数量.难度可能与此套模拟题有差异. 说明: 本试卷包含两种题型:"代码填空"与"程序设计". 填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确.完整.所填写的代码不多于一条语句(即不能出现分号). 编程题要求选手设计的程序对于给定的输入能给出正确的输出结果.注意:在评卷时使用的输入数据与试卷中给出的实例数据可能

全国软件百强3成来自北京再居全国首位

本报讯(记者王刘芳)工业和信息化部发布2011年全国软件业务收入前百家企业名单,本市有30家企业上榜,入选企业数量再次居全国首位. 据介绍,本届全国百强软件企业2010年共实现软件业务收入3135.47亿元,与上届百强2456.26亿元的收入总和相比,增长27.65%.而本市入选的30家企业收入总计670亿元,比上届30家入选企业收入增长了32.9%,其中水晶石数字科技公司.易程科技等5家企业是首次入选.此外,在排名前10的公司中,本市有神州数码.北大方正和同方股份等3家企业. 市经信委软件处负

android-第二届“中国软件杯”大学生软件设计大赛赛题 基于安卓的文件浏览与PDF格式转换软件

问题描述 第二届"中国软件杯"大学生软件设计大赛赛题 基于安卓的文件浏览与PDF格式转换软件 想找第二届"中国软件杯"大学生软件设计大赛赛题 基于安卓的文件浏览与PDF格式转换软件源代码或者相关有用代码 解决方案 文件浏览指文件浏览器吗 pdf这个有开源的:FBReader

全国软件人才设计与开发大赛启动

本报讯 (记者左常睿)由工业和信息化部人才交流中心主办的"全国电子专业人才设计与技能大赛"和"全国软件专业人才设计与开发大赛"3月21日在北京大学正式启动. 全国电子专业人才设计与技能大赛包括五个比赛项目."国信蓝点杯"全国软件专业人才设计与开发大赛包括两个比赛项目,即"JAVA软件开发"和"C语言程序设计".作为大赛的承办单位和协办单位之一,北京大学软件与微电子学院承诺,两个大赛总决赛三等奖及以上的获奖选

浏览器兼容性测试,现在有没有一款软件能模拟主流浏览器(火狐,ie,google)

问题描述 浏览器兼容性测试,现在有没有一款软件能模拟主流浏览器(火狐,ie,google) 浏览器兼容性测试,现在有没有一款软件能模拟主流浏览器(火狐,ie,google) 解决方案 分别下载,然后进行测试.没有这样的软件 解决方案二: 一般是IE+chrome可以一起,Firefox没见过合并的

CDA数据分析师认证考试模拟题库

CDA等级考试模拟题库 Level 1 1.分析教师和会计师之间收入的差异,选择什么分析方法最合适? A.卡方分析 B.方差分析 C.两样本T检验 D.相关系数 答案C   2.分析购买不同产品的频次时,使用以下哪个任务? A.列表数据 B.汇总表 C.汇总统计量 D.单因子频数 答案D     2.分析购买不同产品的频次时,使用以下哪个任务? A.列表数据 B.列表报表 C.汇总统计量 D.单因子频数 答案D   3.以下哪个语句可以将字符型数值date(示例:"2001-02-19"

2011环球小姐中国区大赛即日起登陆官网开始报名

2011年"为中国女性喝彩"环球小姐中国区大赛新闻发布会在上海召开,此次中国区总冠军将于今年9月代表中国前往巴西圣保罗参加2011环球小姐总决赛. 2011环球小姐中国区大赛中国区总裁靳羽西(Yue-Sai Kan)女士.墨西哥驻华大使馆总领事Miguel Barrio先生和赞助商们一同出席了本次发布会.[page] 会上,沪上30多家媒体济济一堂,羽西女士接受了多家媒体专访,并讲述了与环球小姐组织合作的渊源.靳羽西女士表示:"实现美丽,需要美丽的力量.其中最重要的就是目标和

网康科技2011年全国巡展进入郑州站

网康科技"管理有道 应用有序"2011年全国巡展于4月13日在郑州站成功举行,来自河南地区的 众多合作伙伴.用户代表.新闻媒体出席了此次活动,网康科技就大家关注的网络应用管理技术.市场.合作等信息进行了深入的交流,并展示全 新的NS-ICG 6.0.NS-ITM 4.5.NS-NPS 3.0.NS-MSS 2.0等多条产品线,传递了网康科技帮助用户"上好网 用好网"的价值理念.网康科技副总裁左英男先生出席了郑州站巡展会议,并在会上发表了"网康216特快邀您

网康科技2011年全国巡展进入哈尔滨站

网康科技"管理有道 应用有序"2011年全国巡展于4月14日在哈尔滨站成功举行,来自黑龙江地区的 众多合作伙伴.用户代表.新闻媒体出席了此次活动,网康科技就大家关注的网络应用管理技术.市场.合作等信息进行了深入的交流,并展示全 新的NS-ICG 6.0.NS-ITM 4.5.NS-NPS 3.0.NS-MSS 2.0等多条产品线,传递了网康科技帮助用户"上好网 用好网"的价值理念.498)this.w idth=498;' onmousewheel = 'javas