2017年校招全国统一模拟笔试(第五场)编程题集合
https://www.nowcoder.com/test/5986669/summary
第一题:给你n块瓷砖,每块瓷砖都有颜色,但是我们不想相邻的瓷砖颜色一致,所以要进行替换,求最少的替换数
思路:把连续的瓷砖分成两种情况,一是两块相连的,一个是三块相连的,两块相连的,替换哪个都一样,三块的替换中间的最优
1 import java.util.*; 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 int num[] = new int[50]; 8 int ans = 0; 9 for(int i = 1;i<str.length()-1;i++){ 10 if(str.charAt(i)==str.charAt(i-1)&&str.charAt(i)==str.charAt(i+1)&&num[i-1]!=1&&num[i]!=1){ 11 num[i] = 1; 12 ans++; 13 } 14 } 15 for(int i = 0;i<str.length()-1;i++){ 16 if(str.charAt(i)==str.charAt(i+1)&&num[i]!=1&&num[i+1]!=1){ 17 ans++; 18 } 19 } 20 System.out.println(ans); 21 } 22 }
第二题:求最长的DNA序列
思路:统计相连的ATCG即可
1 import java.util.*; 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 int num[] = new int[50]; 8 int ans = 0; 9 for(int i = 0;i<str.length();i++){ 10 if(str.charAt(i)=='A'||str.charAt(i)=='T'||str.charAt(i)=='C'||str.charAt(i)=='G'){ 11 int tmp = 0; 12 while(i<str.length()){ 13 if(str.charAt(i)=='A'||str.charAt(i)=='T'||str.charAt(i)=='G'||str.charAt(i)=='C') 14 tmp++; 15 else 16 break; 17 i++; 18 } 19 if(tmp>ans) 20 ans = tmp; 21 } 22 } 23 System.out.println(ans); 24 } 25 }
第三题:一个字符串由两个相同字符串连接而成,就称这个字符串是偶串,求最少删多少个字符可以构成
思路:每次删两个,然后对半比较
1 import java.util.*; 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 for(int i = str.length()-2;i>0;i-=2){ 8 if(deal(str.substring(0,i))){ 9 System.out.println(i); 10 break; 11 } 12 } 13 } 14 static boolean deal(String str){ 15 int tmp = str.length()/2; 16 for(int i = 0;i<str.length()/2;i++){ 17 if(str.charAt(i)!=str.charAt(i+tmp)) 18 return false; 19 } 20 return true; 21 } 22 }
第四题:没有看懂那个是啥
第五题:给定一个整数的长度N,根据已给的提示猜这个数字。第i个提示是"Y"或者"N",这个数是否是i的倍数,请计算出长度为n的合法的提示的个数。
思路:如果第I是个素数的话,那么这个数与前面的数没有任何关系。
如果第i个数不是素数的话,那么它与前面的它的因数统一即可
如果第i个是素数的次方的话,它不能唯一确定,它得取决于前面的值,总数也就是前面的因数+1
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 int len=scanner.nextInt(); 6 long ans=1; 7 boolean[] visited = new boolean[len+1]; 8 for(int i=2; i<=len; i++) { 9 if(visited[i]) 10 continue; 11 for(int j=2*i; j<=len; j+=i) 12 visited[j] = true; 13 int count=0; 14 long k=i; //int会溢出 15 while(k<=len) { 16 k*=i; 17 count++; 18 } 19 ans=ans*(count+1)%1000000007; 20 } 21 System.out.println(ans); 22 } 23 }