编程在自然数0~30中找到k,使得k,k2,k3都含有数字d。例如:d=1,k=11,k2=121,k3=1331。

解决方案 »

  1.   

    编程在自然数0~30中找到k,使得k,k2,k3(k2,k3分别是指k的二
    次方和k的三次方)都含有数字d。例如:d=1,k=11,k2=121,k3=1331。  
      

  2.   

    CSDN告诉我:
    每天回帖即可获得10分可用分!
      

  3.   

    import java.util.regex.Pattern;public class Test_1 {
    static boolean matcher(int num_1,int num_2,int num_3){
    boolean b_1=false;
    boolean b_2=false;
    boolean b_3=false;
    for(int i=0;i<10;i++){
    String regex=i+"";
    b_1=Pattern.compile(regex).matcher(num_1+"").find();
    b_2=Pattern.compile(regex).matcher(num_2+"").find();
    b_3=Pattern.compile(regex).matcher(num_3+"").find();
    if(b_1&&b_2&&b_3){
    return true;
    }
    }
    return false;
    }
    public static void main(String[] args){
    for(int i=0;i<30;i++){
    if(matcher(i,i*i,i*i*i)){
    System.out.println("k="+i+" k2="+(i*i)+" k3"+(i*i*i));
    }
    }
    }
    }
    测试结果:k=0 k2=0 k30
    k=1 k2=1 k31
    k=5 k2=25 k3125
    k=6 k2=36 k3216
    k=10 k2=100 k31000
    k=11 k2=121 k31331
    k=12 k2=144 k31728
    k=13 k2=169 k32197
    k=15 k2=225 k33375
    k=16 k2=256 k34096
    k=20 k2=400 k38000
    k=21 k2=441 k39261
    k=23 k2=529 k312167
    k=25 k2=625 k315625
    k=26 k2=676 k317576
      

  4.   

    重新贴一下,上面那个最后 System.out.println("k="+i+" k2="+(i*i)+" k3"+(i*i*i));
    显示k3的时候少了个=,真是晕死了,看得测试数据格式不一直
    import java.util.regex.Pattern;public class Test_1 {
    static boolean matcher(int num_1,int num_2,int num_3){
    boolean b_1=false;
    boolean b_2=false;
    boolean b_3=false;
    for(int i=0;i<10;i++){
    String regex=i+"";
    b_1=Pattern.compile(regex).matcher(num_1+"").find();
    b_2=Pattern.compile(regex).matcher(num_2+"").find();
    b_3=Pattern.compile(regex).matcher(num_3+"").find();
    if(b_1&&b_2&&b_3){
    return true;
    }
    }
    return false;
    }
    public static void main(String[] args){
    for(int i=0;i<30;i++){
    if(matcher(i,i*i,i*i*i)){
    System.out.println("k="+i+" k2="+(i*i)+" k3="+(i*i*i));
    }
    }
    }
    }
    测试结果:k=0 k2=0 k3=0
    k=1 k2=1 k3=1
    k=5 k2=25 k3=125
    k=6 k2=36 k3=216
    k=10 k2=100 k3=1000
    k=11 k2=121 k3=1331
    k=12 k2=144 k3=1728
    k=13 k2=169 k3=2197
    k=15 k2=225 k3=3375
    k=16 k2=256 k3=4096
    k=20 k2=400 k3=8000
    k=21 k2=441 k3=9261
    k=23 k2=529 k3=12167
    k=25 k2=625 k3=15625
    k=26 k2=676 k3=17576
      

  5.   

    for (int i = 0; i <= 30; i++) {
    String s1, s2, s3;
    s1 = String.valueOf(i);
    s2 = String.valueOf(i*i);
    s3 = String.valueOf(i*i*i);
    for (char c = '0'; c <= '9'; c++) {
    if (s1.indexOf(c) > -1
    && s2.indexOf(c) > -1
    && s3.indexOf(c) > -1)
    System.out.println("d="+c+", k="+s1+", k2="+s2+ ", k3="+s3);
    }
    }
      

  6.   

    我是数学专业的,居然找不到效率高的算法,非常地失落and伤心。
    无奈只好写个弱智的public class A {
    public static void main(String[] args) {
    for(int d=0;d<31;d++){
    String sd=String.valueOf(d);
    for(int k=0;k<31;k++){
    int k1=k;
    int k2=k*k;
    int k3=k2*k;
    String s1=String.valueOf(k1);
    String s2=String.valueOf(k2);
    String s3=String.valueOf(k3);
    if(s1.contains(sd)&&s2.contains(sd)&&s3.contains(sd)){
    System.out.print("d:"+sd);
    System.out.print("--k1:"+s1);
    System.out.print("--k2:"+s2);
    System.out.println("--k3:"+s3);
    }
    }
    }
    }
    }
      

  7.   

    不是吧,我写个程序的时间,就有这么多的代码上来了。CSDN真活跃啊!