日常机试练习 from【面经+高频+企业题库】
拍照队形(1星)
链接:https://www.nowcoder.com/questionTerminal/1b1f87ef6e7d40529d82c96aef79e8a4
猿辅导公司的 N位(N>=4)研发同学组织了一次秋游活动,某同学带了个无人机在高空拍照,活动结束时,先拍了一张所有同学排成公司猴头Logo的照片, 接着有人提议再排成“猿”的首字母Y字形来拍一张合照。
用字符串中的每一个字符(不是换行符或结束符'\0')代表一位老师,输出排好后的队形。要求 Y字除去中心点外,上下半部分等高,按照从左到右,从上到下进行排序。队形中没人的部分用空格占位。
输入数据保证可以排出一个完整的Y字,即长度为 3k+1 (k>=1)
例如: 7个 x ,排成队形为(为了方便说明,这里用‘-’代替空格):
x---x
-x-x
--x
--x
--x
![](https://img2020.cnblogs.com/i-beta/1806053/202003/1806053-20200315153747235-1758485421.png)
ps:读入字符串,注意可能含空格
import java.util.Scanner;//util里的Scanner public class Main{//Java要用class包在方法函数外面,才完整。 public static void main(String[] args){ //String[] args必须要有,因为要传入参数 Scanner sc=new Scanner(System.in);//System.in作为输入,放在括号里 //【Scanner】类,初始化 int N=sc.nextInt();//.nextInt()输入的一位的int sc.nextLine();//.nextLine()输入换行 String s=sc.nextLine();//.nextLine()整行作为输入(不会因为空格而断掉) int k=0;//记录String中的位置 int n=N/3; for(int i=0;i<n;i++){ for(int j=0;j<i;j++)System.out.print(" "); System.out.print(s.charAt(k++)); for(int j=0;j<2*n-1-2*i;j++)System.out.print(" "); System.out.println(s.charAt(k++));//s.charAt(),使用String这种STL } for(int i=0;i<N-2*n;i++){ for(int j=0;j<n;j++)System.out.print(" "); System.out.println(s.charAt(k++)); } } }
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m1=1001;int m2=1001;int m3=1001; for(int i=0;i<n;i++){ int temp=sc.nextInt(); if( temp==m1 || temp==m2 || temp==m3 )continue; if(temp<m1){m3=m2;m2=m1;m1=temp;continue;} if(temp<m2){m3=m2;m2=temp;continue;} if(temp<m3){m3=temp;continue;} } if(m3==1001)System.out.print(-1); else System.out.print(m3); } }
import java.util.Scanner; //import java.Math;//这个Math不用import!!!系统自带 public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] a=new int[N];//input原始位置信息 for(int i=0;i<N;i++){ a[i]=sc.nextInt(); } int[] judge=new int[N];//计算judge[i]=(i-1~i)+(i~i+1)-(i-1~i+1) //最大的judge[i]会被去掉 int max=0;//初始化max,因为max一定>=0 for(int i=1;i<=N-2;i++){ judge[i]= Math.abs(a[i]-a[i-1]) + Math.abs(a[i+1]-a[i]) - Math.abs(a[i+1]-a[i-1]); if(judge[i]>max)max=judge[i]; } int sum=0; for(int i=0;i<=N-2;i++){ sum+=Math.abs(a[i+1]-a[i]); } sum-=max; System.out.println(sum); } }
未考虑到中间的min哨兵的情况,所以70%的通过率:
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] a=new int[N]; for(int i=0;i<N;i++){ a[i]=sc.nextInt(); } int result=0; int index=-1;int lastindex=-1; while(true){ int min=1001;//每轮重置 for(int i=lastindex+1;i<N;i++){//找区间最小值 if(a[i]<min) {min=a[i];index=i;} } result+= (index-lastindex-1); if(index==N-1)break;//break的情况,while循环结束 lastindex=index; } for(int i=0;i<N;i++){ if(a[lastindex]<a[i] && a[i]<a[index]){ result++;//index和lastindex之间有数字(在升序下),所以要多一次移动 break;//直接break,不用flag } } System.out.println(result); } }
华为机测
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int stu = sc.nextInt(); int ops = sc.nextInt(); int[] score = new int [stu+1]; for(int i=1; i<=stu; ++i){ score[i]=sc.nextInt(); } for(int i=1;i<=ops; ++i){ String type = sc.next(); if(type.equals("Q")){ int left = sc.nextInt(); int right = sc.nextInt(); int max = score[left]; for(int k=left+1; k<=right; ++k){ if(score[k]>max) max= score[k]; } System.out.println(max); } else if(type.equals("U")){ int key = sc.nextInt(); int value = sc.nextInt(); score[key]=value; } } } }
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String[] names = new String[1000]; String[] shortNames = new String[1000]; int[] lines = new int[1000]; int[] number = new int[1000]; int index = 0;//下标,作为4个数组的id //这是没有实体类的替代品 while(sc.hasNextLine()){ String originName = sc.next(); int line = sc.nextInt(); String name = originName.substring(1 + originName.lastIndexOf("\\")); boolean dupFlag = false; for(int i=0; i<index; ++i){ if(names[i]==name && lines[i]==line){ dupFlag = true; ++number[i]; break; } } if(dupFlag == false){ names[index] = name; lines[index] = line; number[index] = 1; ++index; } } for(int i=0; i<=index; ++i){ int length = names[i].length(); if(length<=16){ shortNames[i] = names[i]; } else{ shortNames[i] = names[i].substring(length-16); } } //top-8 //找到一个打印一个,然后将number置0,反正也不用了 for(int top=0; top<8; ++top){ int maxNum = 0; int maxIndex = 0; for(int i=0; i<=index; ++i){ if(maxNum < number[i]){ maxNum = number[i]; maxIndex = i; } } //打印 System.out.println(shortNames[maxIndex] +" "+ lines[maxIndex] +" "+ maxNum); //置0 number[maxIndex]=0; } } }