2017年校招全國統一模擬筆試(第五場)編程題集合

https://www.nowcoder.com/test/5986669/summaryjava

第一題:給你n塊瓷磚,每塊瓷磚都有顏色,可是咱們不想相鄰的瓷磚顏色一致,因此要進行替換,求最少的替換數spa

思路:把連續的瓷磚分紅兩種狀況,一是兩塊相連的,一個是三塊相連的,兩塊相連的,替換哪一個都同樣,三塊的替換中間的最優code

 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序列blog

思路:統計相連的ATCG便可ci

 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 }

 

第三題:一個字符串由兩個相同字符串鏈接而成,就稱這個字符串是偶串,求最少刪多少個字符能夠構成字符串

思路:每次刪兩個,而後對半比較get

 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 }

 

第四題:沒有看懂那個是啥string

 

 

第五題:給定一個整數的長度N,根據已給的提示猜這個數字。第i個提示是"Y"或者"N",這個數是不是i的倍數,請計算出長度爲n的合法的提示的個數。it

思路:若是第I是個素數的話,那麼這個數與前面的數沒有任何關係。io

  若是第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     }
相關文章
相關標籤/搜索