题目:
给出一个正整数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");}
}
}


京公网安备 11010502036488号