子串

子串

https://ac.nowcoder.com/acm/problem/13253

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

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务