笔试强训 Day 16:字符串替换 + 神奇数 + DNA 序列

发布时间:2026/6/29 17:54:51
笔试强训 Day 16:字符串替换 + 神奇数 + DNA 序列 Day 16字符串替换解题思路当遍历到 % 时将字符数组的参数拼接同时将标记位设为 true当标记为 true说明上一个是 %做一个是 s无需再次拼接标记位恢复为 false代码实现importjava.util.*;publicclassStringFormat{publicStringformatString(StringA,intn,char[]arg,intm){intindex0;booleanflagfalse;StringBuildersbnewStringBuilder();for(inti0;iA.length();i){charchA.charAt(i);if(ch%){flagtrue;sb.append(arg[index]);}elseif(flag){flagfalse;}else{sb.append(ch);}}while(indexarg.length){sb.append(arg[index]);}returnsb.toString();}}神奇数解题思路可以精简成这样枚举区间[a, b]中的每个整数判断其是否为神奇数若是则计数加一。对每个整数转成字符串使用双重循环枚举两个不同位置的数位分别作为十位和个位。若十位为0说明存在前导零跳过若两个位置相同也跳过。将两个数位组成两位数并判断其是否为质数。质数判断从2枚举到sqrt(n)可以通过 i * i n 判断若存在因子能整除n则不是质数否则是质数。只要找到一个满足条件的两位质数该整数就是神奇数。代码实现// 存在不同位置的两个数位组成一个两位数且不含前导0// 这个两位数为质数// 只要找到一个质数即满足神奇数// 输入为两个整数a和b代表[a, b]// 输出为一个整数表示区间内满足条件的整数个数// 11 13 14 16 17 18importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intasc.nextInt();intbsc.nextInt();intcount0;for(intnuma;numb;num){if(isMagic(num)){count;}}System.out.println(count);}publicstaticbooleanisMagic(intnum){StringsString.valueOf(num);for(inti0;is.length();i){for(intj0;js.length();j){if(ij)continue;inttenss.charAt(i)-0;intoness.charAt(j)-0;// 两位数不能有前导 0if(tens0)continue;intvaluetens*10ones;if(isPrime(value)){returntrue;}}}returnfalse;}publicstaticbooleanisPrime(intn){if(n2)returnfalse;for(inti2;i*in;i){if(n%i0){returnfalse;}}returntrue;}}DNA 序列解题思路滑动窗口找到所有长度为 N 的 DNA 子序列找到最大的 GC-Ratio 的第一个认真读一遍题目把重要的信息列出来即可代码实现// 由 A/C/G/T 四个字母的排列组合组成// G 和 C 的比例 : GC-Ratio (nG nC) / nSum// 在序列中, 从左往右, 找出 GC-Ratio 最高, 且长度为 N 的第一个子串// ACGT 的子串有: ACG , CG , CGT 等等但是没有 AGT CT 等等importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerinnewScanner(System.in);Stringstrin.next();intnin.nextInt();char[]chsstr.toCharArray();intlen0,retl0;Doublegc0.0,gcr0.0;for(intl0,r0;rchs.length;r){charinputchs[r];if(inputG||inputC){gc;}lenr-l1;while(lenn){if(gcrgc/n){gcrgc/n;retll;}charoutputchs[l];if(outputG||outputC){gc--;}lenr-l1;}}System.out.println(str.substring(retl,retln));}}