第一题:给你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
第二题:求最长的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;ians)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
第四题:没有看懂那个是啥
第五题:给定一个整数的长度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 }