2018年校招全国统一模拟笔试(第一场)编程题集合
https://www.nowcoder.com/test/9439037/summary
这一套题做了下,感觉有些题目没什么心情去做,而且好多都忘了,知道是什么算法,但是忘了具体实施了。
只做了三个水题。。。很惭愧
题目一:给你一个字符串,要你分别把这些字符向后推N个
思路:模拟一下即可
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner cin = new Scanner(System.in); 6 String str = cin.nextLine(); 7 String ans = ""; 8 for(int i = 0;i<str.length();i++){ 9 if(str.charAt(i)<='y'&&str.charAt(i)>='a') 10 ans+=(char)(str.charAt(i)+1); 11 else if(str.charAt(i)<='Y'&&str.charAt(i)>='A') 12 ans+=(char)(str.charAt(i)+1); 13 else if(str.charAt(i)=='Z') 14 ans+='A'; 15 else if(str.charAt(i)=='z') 16 ans+='a'; 17 else 18 ans +=str.charAt(i); 19 } 20 System.out.println(ans); 21 } 22 23 }
题目三:有n个硬币,要用这些银币构成m元,求最多可以使用多少枚硬币(每个硬币只能用一次)
思路:由于n<=10,所以最多的组合数也就是1024个,所以直接枚举即可
1 import java.util.*; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner cin = new Scanner(System.in); 6 int n = cin.nextInt(); 7 int m = cin.nextInt(); 8 int arr[] = new int [50]; 9 for(int i = 0;i<n;i++) 10 arr[i] = cin.nextInt(); 11 Arrays.sort(arr,0,n); 12 int ans = 0; 13 for(int i = 0;i<=(1<<n);i++){ 14 int tmp = 0; 15 int cnt = 0; 16 int tmpi = i; 17 for(int j = 0;j<n;j++){ 18 if(tmpi%2!=0){ 19 tmp+=arr[j]; 20 cnt++; 21 } 22 tmpi/=2; 23 } 24 if(cnt>ans&&tmp==m) 25 ans = cnt; 26 } 27 System.out.println(ans); 28 } 29 }
题目五:有一个1-n的序列,要求最少的左右交换次序,使p[i]!=i
思路:但p[i]==i&&p[i+1]==i+1时交换一次,还有p[i]==i时换一次即可
1 import java.util.*; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner cin = new Scanner(System.in); 6 int m = cin.nextInt(); 7 int arr[] = new int[100005]; 8 for(int i = 1;i<=m;i++){ 9 arr[i] = cin.nextInt(); 10 } 11 int ans = 0; 12 for(int i = 1;i<=m;i++){ 13 if(arr[i]==i){ 14 if(i<m&&arr[i+1]==i+1){ 15 ans++; 16 i++; 17 }else 18 ans++; 19 } 20 } 21 System.out.println(ans); 22 } 23 }