解题思路:使用递归循环选出三位数(先排序基本能达到选出的为递减顺序)

注意事项:递归会爆栈,所以限制递归次数,超过一千的设置一千就行

参考代码:

package javaA2018第二次;

import java.util.*;

public class 倍数问题 {

static int n,k;

static int a[],b[];

static int x[]=new int [3];

static boolean zhen=false;

static int max=0;

static int js=0;

    public static void main(String []args)

    {

    Scanner scan=new Scanner (System.in);

    n=scan.nextInt();

    k=scan.nextInt();

    a=new int [n];

   

    for(int i=0;i<n;i++)

    {

    a[i]=scan.nextInt();

    }

    scan.close();

    Arrays.sort(a);

    if(n<1000)

    {

    b=new int [n];

          for(int i=0;i<n;i++)

      {

    b[i]=a[n-1-i];

      } 

          Arrays.sort(b);

    }

    else

    {

    b=new int [1000];

          for(int i=0;i<1000;i++)

      {

    b[i]=a[n-1-i];

      } 

          Arrays.sort(b);

    }

    f(0,0);

    System.out.println(max);

    }

private static void f(int k, int count) {

// TODO Auto-generated method stub

if(k>b.length||count>3)

{

return ;

}

if(js>10)

{

return ;

}

if(k==b.length&&count==3)

{

check(x);

// print(x);

return ;

}

for(int i=0;i<2;i++)

{

if(i>0&&k<b.length)

{

for(int m=count;m<count+i;m++)

{

if(count+i<=3)

{

x[m]=b[k];

}

}

}

f(k+1,count+i);

}

}

private static void print(int[] x2) {

// TODO Auto-generated method stub

for(int i=0;i<3;i++)

{

System.out.print(x2[i]+" ");

}

System.out.println();

}

private static void check(int[] x2) {

// TODO Auto-generated method stub

int sum=0;

for(int i=0;i<3;i++)

{

sum+=x2[i];

}

if(sum%k==0)

{

js++;

  if(sum>max)

  {

  max=sum;

  }

// zhen=true;

}

}

}


点赞(0)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论