WeBank笔试题目讨论
第一题
没啥好说的应该都过
第二题
第二题我只过了82%不知道为什么,我觉得自己都考虑到了,希望有大神能帮忙解答一下
题目描述:
旋转数组并输出
x为顺时针,y水平反转,z逆时针
package cn.webank; import java.util.Arrays; import java.util.Scanner; public class Demo02 { static int m,n; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = scanner.nextInt()%4; int y = scanner.nextInt()%2; int z = scanner.nextInt()%4; n = scanner.nextInt(); m = scanner.nextInt(); int Q = scanner.nextInt(); Point[] res=new Point[Q]; for (int i = 0; i < Q; i++) { int x1 = scanner.nextInt(); int y1 = scanner.nextInt(); Point p=new Point(x1,y1); for (int j = 0; j < x; j++) { p=rotateX(p.x,p.y); int temp=m; m=n; n=temp; } for (int j = 0; j < y; j++) { p=rotateY(p.x,p.y); } for (int j = 0; j < z; j++) { p=rotateZ(p.x,p.y); int temp=m; m=n; n=temp; } res[i]=p; } Arrays.stream(res).forEach(each-> System.out.println(each.x+" "+each.y)); } public static Point rotateX(int x,int y){ return new Point(y,n-x+1); } public static Point rotateZ(int x,int y){ return new Point(m-y+1,x); } public static Point rotateY(int x,int y){ return new Point(x,m-y+1); } } class Point{ int x; int y; public Point(int x, int y) { this.x = x; this.y = y; } }
第三题
第三题代码我只过了18%
package cn.webank; import java.util.Scanner; public class Demo03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] arr=new int[n]; for (int i = 0; i < n; i++) { arr[i]=scanner.nextInt(); } int[] res=new int[n]; for (int i = 0; i < n; i++) { res[i]=numXiaoyu(arr,res,i); } long count=0; for (int i = 0; i < n; i++) { if (res[i]<2){ continue; } if (res[i]==2){ count++; }else { count+=res[i]*(res[i]-1)/2; } } System.out.println(count); } public static int numXiaoyu(int[] arr,int[] res,int index){ if (index==0){ return 0; } for (int i = index-1; i >= 0 ; i--) { if (arr[index]>=arr[i]){ return res[i]+1; } } return 0; } }
主要的想法是动态规划,记录比自己小的数字的数量,并根据数量进行统计,2能够贡献1,更大的数贡献x*(x-1)/2,但是结果只能跑通18%,好像还是6的特殊情况🤐求助呀求助
全部评论
(0) 回帖