过大年问题、循环素数问题java实现

13 篇文章 0 订阅

1、过大年问题
这里写图片描述
七个汉字分别代表七个数字,包括0-9

//果断穷举...
    public static void main(String[] args) {
        int sum0;
        int sum1;
        int sum2;
        int sum3;
        int sum4;
        int sum5;
        int sum6;
        int sum7;
        int sum8;
        for (int a = 0; a < 10; a++)
            for (int b = 0; b < 10; b++)
                for (int c = 0; c < 10; c++)
                    for (int d = 0; d < 10; d++)
                        for (int e = 0; e < 10; e++)
                            for (int f = 0; f < 10; f++)
                                for (int g = 0; g < 10; g++) {
                                    sum0 = g;
                                    sum1 = 10 * f + sum0;
                                    sum2 = 100 * e + sum1;
                                    sum3 = 1000 * d + sum2;
                                    sum4 = 10000 * c + sum3;
                                    sum5 = 100000 * b + sum4;
                                    sum6 = 1000000 * a + sum5;
                                    sum7 = sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6;
                                    sum8 = 1111111 * d;//刚开始我用的1000000 * d+100000 * d+...醉了
                                    if (sum7 == sum8) {
                                        System.out.println(sum6);
                                        break;
                                    }

                                }
    }
}

2、循环素数
如1193是个素数,对它循环移位发现:1931、9311、3119都是素数。
求5位最大的循环素数。

//对于这样的问题一般有两种方法:
1、分离法:即从满足条件的每一个答案进行循环,此题中对10000-99999循环,对其中每一位执行分离,最后将每一位的数值合在一起进行判断。
2、合成法:即对答案的每一位都进行循环,此题中对0-9循环,判断合成的数是否符合条件。
对此题,明显合成法更好。
public class Main {

    public static void main(String[] args) {
        int sum0;
        int sum1;
        int sum2;
        int sum3;
        int sum4;
        for (int a = 1; a < 10; a+=2)
            for (int b = 1; b < 10; b+=2)
                for (int c = 1; c < 10; c+=2)
                    for (int d = 1; d < 10; d+=2)
                        for (int e = 1; e < 10; e+=2) {
                                sum0 =10000*a+1000*b+100*c+10*d+e;
                                sum1 =10000*b+1000*c+100*d+10*e+a;
                                sum2 =10000*c+1000*d+100*e+10*a+b;
                                sum3 =10000*d+1000*e+100*a+10*b+c;
                                sum4 =10000*e+1000*a+100*b+10*c+d;
                                if(f(sum0)&&f(sum1)&&f(sum2)&&f(sum3)&&f(sum4)){
                                    System.out.println(sum0);
                            }
        }
    }
    //把所有其他功能单独写成方法是一种很好的习惯
    public static boolean f(int sun){
        boolean tag=true;
        for (int i = 2; i<=sun/2; i++)
            if (sun%i==0) {
                tag=false;
            }
        return tag;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值