2022-4-16 荣耀笔试
第一题 80% 问题在哪?
package org.rongyao; import java.util.Scanner; public class Main { static int[][] day={ {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,31} }; public static void main(String[] args) { Scanner sc=new Scanner(System.in); String[] s=sc.nextLine().split(" "); int year=Integer.parseInt(s[0]);int month=Integer.parseInt(s[1]); int week=Integer.parseInt(s[2]);int we=Integer.parseInt(s[3]); if(week>6){ System.out.println(0); return ; } int sum=0; for(int i=2000;i<year;i++){ if(isLuna(i)){ sum+=366; }else{ sum+=365; } } int flag=isLuna(year)? 1:0; for(int i=1;i<month;i++){ sum+=day[flag][i]; } int d=(sum-2)%7; int dd=(sum+day[flag][month]-2)%7; //28 4 3 System.out.println("flag"+day[flag][month]); System.out.println("d"+d+"==="+"dd"+dd); int start=d==0? 1:d+1; int end=dd==0? 7:dd; int curweek=1; int ss=day[flag][month]; ss-=(7-start+1); curweek+=ss/7; if(ss%7!=0){ curweek+=1; } if((week==1&&we<start)||(week==curweek&&we>end)){ System.out.println(0); return; } System.out.println(start+"===="+end); int res=0; if(week==1){ res=we-start+1; }else{ for(int i=1;i<=week;i++){ if(i==1){ res+=(7-start+1); }else if(i==week){ res+=we; }else{ res+=7; } } } System.out.println(s[0]+"-"+s[1]+"-"+String.valueOf(res)); } public static boolean isLuna(int year){ if((year%4==0&&year%100!=0)||year%400==0){ return true; } return false; } }第二题 编译器
第三题 奥特曼打怪兽 50%
package org.rongyao; import java.util.*; public class Solution { static int[] dx={0,1,0,-1}; static int[] dy={1,0,-1,0}; public static void main(String[] args) { Scanner sc=new Scanner(System.in); List<String> nums=new ArrayList<>(); String s1 = sc.nextLine(); nums.add(s1); String[] s2 = s1.split(" "); int m=s2.length; for(int i=0;i<m-1;i++){ nums.add(sc.nextLine()); } PriorityQueue<int[]> queue=new PriorityQueue<>((a,b)->a[0]-b[0]); int[][] matrix=new int[m][m]; for(int i=0;i<m;i++){ String[] s=nums.get(i).split(" "); for(int j=0;j<m;j++){ matrix[i][j]=Integer.parseInt(s[j]); if(matrix[i][j]>=2){ queue.offer(new int[]{matrix[i][j],i,j}); } } } // for(int i=0;i<m;i++){ // for(int j=0;j<m;j++){ // System.out.print(matrix[i][j]+" "); // } // System.out.println(); // } int res=0;int re=0; int startx=0;int starty=0; while(!queue.isEmpty()){ int[] node=queue.poll(); re=bfs(matrix,startx,starty,node[1],node[2]); // System.out.println("startx"+startx+"=="+starty+"=="+node[1]+"=="+node[2]); // System.out.println("re"+re); if(re==-1){ break; }else{ res+=re; } startx=node[1];starty=node[2]; } if(re==-1){ System.out.println(-1); }else{ System.out.println(res); } } public static int bfs(int[][] matrix,int start,int end,int targetx,int targety){ int m=matrix.length; boolean[][] vis=new boolean[m][m]; Queue<int[]> queue=new LinkedList<>(); queue.offer(new int[]{start,end}); vis[start][end]=true; int cnt=0; while (!queue.isEmpty()) { int size=queue.size(); for(int i=0;i<size;i++){ int[] node = queue.poll(); if(matrix[node[0]][node[1]]>=2){ continue; } if(node[0]==targetx&&node[1]==targety){ matrix[targetx][targety]=1; return cnt; } for(int k=0;k<4;k++){ int next_x=node[0]+dx[k]; int next_y=node[1]+dy[k]; if(next_x<0||next_x>=m||next_y<0||next_y>=m||matrix[next_x][next_y]==0||vis[next_x][next_y]){ continue; } queue.offer(new int[]{next_x,next_y}); vis[next_x][next_y]=true; } } cnt++; } return -1; } }