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 }