题目:
给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。
java 代码:
(参考了题解,依次算出各种进制所对应的字符串,进行比对,用了StringerBuilder的indexOf函数,暴力解法,可以通过,细节可能不完善)
import java.util.*; public class Main{ public static void main(String[] args) { int flag=0; Scanner sc = new Scanner(System.in); int n=sc.nextInt(); String s = sc.next(); if(s!=null) { for(int i=2;i<=Math.min(n+1,16);i++) { StringBuilder ss = new StringBuilder(); for(int j=1;j<=n;j++) { int num = j; StringBuilder sss = new StringBuilder(); while(num>0) { int k = num % i; if(k > 9) { sss.append((char)('A'+k-10)); } else { sss.append(k); } num=num/i; } sss.reverse(); ss.append(sss); } if(ss.indexOf(s)>=0) {System.out.println("yes");flag=1;break;} } if(flag==0) System.out.println("no"); } else {System.out.println("no");} } }