蓝桥杯 第七届 Java C组真题及解析(三)

223 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

七、题目

加法变乘法

我们都知道:1+2+3+ … + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:1+2+3+…+1011+12+…+2728+29+…+49= 2015就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

参考代码

public class Question7{

    public static void main(String[]args) throws Exception {

       //用穷举法来试探1225+a*b+e*f-a-b-e-f==2015  (b=a+1,f=e+1)

       for(inti=1; i<50; i++){

              for(intj=1;j<50;j++){

                  if((1225+i*(i+1)+j*(j+1)-i-j-(i+1)-(j+1))==2015)

                      System.out.println(i+"*****"+j);

                  }
              }
          }
   }

}

八、题目 

移动距离 
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3… 
当排满一行时,从下一行相邻的楼往反方向排号。 
比如:当小区排号宽度为6时,开始情形如下:

1 2  3  4 5  6

12 11 109  8  7

13 14 1516  17 18....

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数wm n,空格分开,都在1到10000范围内

要求输出一个整数,表示mn两楼间最短移动距离。

参考答案:

public class Question8{

 
   public static voidm ain(String[]args) {

      Scanner sc = newScanner(System.in);
      System.out.println("inputw:");
      int w = sc.nextInt();
      System.out.println("inputn:");
      int n = sc.nextInt();
      System.out.println("inputm");
      int m = sc.nextInt();
      int[][] a=newint[w][w];

            for(int i=0; i<a.length; i++)

                if(i==0){//第一行

                    for(int j=0;j<w;j++)

                        a[i][j]=j+1;

                   }
                }

                elseif(i%2!=0){//奇数行

                    int t=w*i+1;

                    for(int j=w-1;j>=0;j--){

                        a[i][j]=t++;

                    }

                }else{//偶数行(除过0)

                    int t=w*i+1;

                    for(int j=0;j<w;j++)

                        a[i][j]=t++;

                    }
                }
            }

            //打印

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

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

                   System.out.print(a[i][j]+"\t");

               }

               System.out.println();

           }

           //求最短路径

            intx1=0,x2=0,y1=0,y2=0;

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

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

                    if(a[i][j]==n){

                        x1=i;

                        y1=j;

                    }

                    if(a[i][j]==m){

                        x2=i;

                        y2=j;

                    }

                }

            }        

            int distance = Math.abs((x2-x1)+(y2-y1));

            System.out.println(distance);

   }

}

 

九、题目 

打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。

为了便于比对空格,所有的空白位置都以句点符来代替。

要求输入两个整数mn,表示笔的宽度,X的高度。用空格分开(0保证n是奇数)

要求输出一个大X

例如,用户输入:

3  9

程序应该输出: 

再例如,用户输入: 
4 21 
程序应该输出 

参考答案

public class Question9{

     public static void main(String[] args) {
	  // TODO Auto-generated method stub
          Scanner ci=new Scanner(System.in);
          int m=ci.nextInt(),n=ci.nextInt();
          int b=n/2*2+m;
          char [][] a=new char[n][b];
          for (int i = 0; i < n; i++) {
                for (int j = 0; j < b; j++) {
                 a[i][j]='.';		
            }
           }
          int x=0,y=0;
          for(int i=0;i<n;i++) {
              for(int j=0;j<b;j++) {    
                   if(j-i<m&&j-i>=0) {
                         a[i][j]='*';
                   }
                   if(b-j-i<=m&&b-j-i>0) {
                         a[i][j]='*';
                   }
              }
          }
          
          for (int i = 0; i < n; i++) {
            for (int j = 0; j < b; j++) {
                 System.out.print(a[i][j]);
            }
              System.out.println();
          }
    }

}