不一样的小目标
小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;
}
}