解题思路:使用递归循环选出三位数(先排序基本能达到选出的为递减顺序)
注意事项:递归会爆栈,所以限制递归次数,超过一千的设置一千就行
参考代码:
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语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:641 |
简单的a+b (C语言代码)浏览:685 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:640 |
买不到的数目 (C++代码)浏览:909 |
输出正反三角形 (C语言代码)格式错误!!!浏览:1177 |
三角形 (C++代码)递推浏览:825 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:614 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:616 |
The 3n + 1 problem (C语言代码)浏览:603 |
Cylinder (C语言描述,蓝桥杯)浏览:1279 |