华为OJ训练之0036-170112-素数伴侣

===========================================

题目描述

//若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
//输入:
//有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
//输出:
//输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
//
//知识点 查找,搜索,排序
//运行时间限制 10M
//内存限制 128
//输入
//输入说明
//1 输入一个正偶数n
//2 输入n个整数
//输出
//求得的“最佳方案”组成“素数伴侣”的对数。
//样例输入 4 2 5 6 13
//样例输出 2

==========================================

三次没有通过 蓝瘦香菇

明明测了好几个都没错的呀 今天运势不好

===========================================

package package02;

import java.util.Scanner;

//题目描述
//若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
//输入:
//有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
//输出:
//输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
// 
//知识点   查找,搜索,排序
//运行时间限制    10M
//内存限制  128
//输入    
//输入说明
//1 输入一个正偶数n
//2 输入n个整数
//输出    
//求得的“最佳方案”组成“素数伴侣”的对数。
//样例输入  4 2 5 6 13
//样例输出  2
public class oj036 {

    int maxcount=0;
    //使用全排列
    void permutation(int[] a,int k,int m)  
    {  
        int i,j;  
        if(k == m)  
        {  
            int count=0;
            for(i=0;i<=m;i++)  
            {
            //根据这种排列的结果 找素数对

                if(i<m)
                {
                    System.out.print(a[i]);System.out.print(a[i+1]);
                    if(isPrime(a[i]+a[i+1])){count++;}
                    i++;
                }

            }
            if(count>maxcount){maxcount=count;}
            System.out.println();  


        }  
        else  
        {  
            for(j=k;j<=m;j++)  
            {  
                int t=a[j];
                a[j]=a[k];
                a[k]=t;
                permutation(a,k+1,m);  
                 t=a[j];
                a[j]=a[k];
                a[k]=t;
            }  
        }  

    }







    public boolean isPrime(int n) {

        boolean re = true;

        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                re = false;
                break;
            }
        }
        if (n <= 1) {
            re = false;
        }
        return re;
    }



    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int[] number=new int[n];

        for(int i=0;i<n;i++)
        {
            number[i]=scanner.nextInt();
        }

        oj036 oj=new oj036();
        oj.permutation(number, 0, n-1);
        System.out.print(oj.maxcount);



    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值