Lenovo 专业笔试

不一样的小目标

小A和小B都是搬砖人,因为各自的身体素质不同,所以他们为自己制定了不同的小目标,小A可以一次搬al块砖,但是每搬一次就要休息b1分钟,他的目标是一天服c1块:同样的,小B可以一次搬a2块砖,但是每搬一次就要休息b2分钟,他的目标是一天搬c2块砖。

每个人情况不同,只要完成自己的目标就好,已知某天小A和小B同时开始工作,请问他们谁先完成自己的目标?如果是小A则输出'A',如果是小B则出 B.如果两个人同时完成,则输出A&B'

  • 输入描述:第一行是一个整数T,表示数据组数(1<=Ts<=100)·接下来T行,每行有六个正整数a1,b2,c2,a2,b2,c2,含义如题所示。(a1,b2,c2,a2,b2,c2<=10^9)
  • 输出描述:输出包含T行,每行一个字符串如题所示。

样例输入:

7
7 9 19 9 1 89
7 9 95 4 5 9

输出:

B
B

代码:

import java.util.*;
import java.math.*;

public class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int len = sc.nextInt();
    int[][] strInput = new int[len][6];
    for(int i=0; i<len; i++){
      for(int j=0; j<6; j++){
        strInput[i][j]=sc.nextInt();
      }
    }
    System.out.println(tellAorB(strInput,len));
  } 
  
  public static String[][] tellAorB(int[][] str, int len){
    String[][] res = new String[len][1];
  // 这里应当是假设了两人搬砖速度相当
    for(int i=0; i<len; i++){
      int a1 = str[i][0];
      int b1 = str[i][1];
      int c1 = str[i][2];
      int a2 = str[i][3];
      int b2 = str[i][4];
      int c2 = str[i][5];
      int T1 = ((int)Math.ceil((double)c1/a1) - 1)*b1 ;
      long T2 = ((int)Math.ceil((double)c2/a2) - 1)*b2 ;
      if(T1>T2){
        res[i][1] = "B";
      }else if(T1<T2){
        res[i][1] = "A";
      }else{
        res[i][1] = "A&B";
      }
    }
    return res;
  }
}

矩阵操作

给你一个n行n列的矩阵,你需要对它进行q次操作,操作种类有如下两种:

1r:表示格短阵的第r行向右循环移位1位。

2c:表示格矩阵的第c列向上循环移位1位。

假设矩阵的某一行元素从左向右为a_1,a_2.....a_n,其向右循环移位1位后的结果是an.a_1.a_2,, a_(n-1],将矩阵的某-列向上循环位移类似,具体可以参看样例解释,最后输出q次操作后的结果矩阵。

  • 输入描述:第一行两个正整数n, q、分别表示矩阵的行列数均为n,要进行操作数为q. 1<n=100, q<=200.接下来n行每行n个整数,第i行的第j个数表示矩阵第i行第j列的元素值。接下来q行每行两个整数ti和xi,其中ti表示操作的种类(1成2),xi表示操作对应的r或c,保证1<=xi<=n.
  • 输出描述:输出一个n行n列的矩阵,表示q次操作后的结果矩阵。

样例输入:

3 2
1 2 3
4 5 6
7 8 9
2 2
1 2

输出:

1 5 3 
6 4 8 
7 2 9

 样例解释:

第一个操作是将矩阵的第二列向上循环移位1位,矩阵变为:

1 5 3
4 8 6
7 2 9

第二个操作是将矩阵的第二行向右循环移位1位,矩阵变为:

1 5 3
6 4 8
7 2 9
public class matrixCircle {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len = in.nextInt();
        int qCount = in.nextInt();
        int[][] matrix = new int[len][len];//矩阵
        for(int i=0; i<len; i++){
            for (int j=0; j<len; j++){
                matrix[i][j] = in.nextInt();
//                System.out.print(matrix[i][j]);
            }
        }
        for (int k=1; k<=qCount; k++){
            loopFun(matrix,in.nextInt(),in.nextInt());
        }
        //输出matrix循环移位后的结果
        for (int i=0; i<len; i++){
            for (int j=0; j<len-1; j++){
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println(matrix[i][len-1]);
        }

    }

    private static int[][] loopFun(int[][] matrix, int qi, int xi){
        // qi=1操作行, qi=2操作列
        // xi对应操作的行或者列
        int len = matrix.length;

        // 对某行循环移位,即移动该行的元素的列位置
        if(qi==1){
            int temp = matrix[xi-1][len-1];//记录下该行最右边元素的值,最后放到开头
            for(int j=len-1; j>0; j--){
                matrix[xi-1][j] = matrix[xi-1][j-1];
            }
            matrix[xi-1][0] = temp;
        }

        // 对某列循环移位,即移动该列的元素的行位置
        if(qi==2){
            int temp = matrix[0][xi-1]; //记录该列的第一个元素的值,最后放到最下面
            for(int i=0; i<len-1; i++){
                matrix[i][xi-1] = matrix[i+1][xi-1];
            }
            matrix[len-1][xi-1] = temp;
        }

        return matrix;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值