解题思路:使用递归循环选出三位数(先排序基本能达到选出的为递减顺序)
注意事项:递归会爆栈,所以限制递归次数,超过一千的设置一千就行
参考代码:
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分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复