携程2017春季笔试第一题
发布于 2017-04-11 21:22 1749 次浏览 0 赞 来自 试题交流  


import java.util.Scanner;


public class Main {


public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int n = s.nextInt();

int[] factor = new int[50];//存放因子的数组

int i = 0;

//从2开始分解出因子

for (int j = 2; j <= n; j++) {

factor[i++] = j;

n-=j;

}

if (0 != n) {

if (n == i + 1) {//即现在的n比因子数还多一个,不可能均匀分配,所以加在最后先

factor[i - 1]++;

n--;

}

for (int j = 0; j < n; j++) {//从后往前依次加1

factor[i - j - 1]++;

}

}

int max = 1;

for (int j = 0; j < i; j++) {

max *= factor[j];

}

System.out.println(max);

}


}


2 条回复

我也是这个思路,原来看过这题,但没想过为什么这个思路是对的啊

2017-04-11 21:25

package test;

//没有测试

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

int n = scan.nextInt();

int res = 1;

int sum = 0;

if(n>3){

int i=2;

while((sum+=i)<=n){

res*=i;

i++;

}

if(sum>n){

res=res/(i-1)*(n-(sum-2*i+1));

}

}if(n==3){

res=2;

}else{

res=0;

}

System.out.println(res);

}

}


2017-04-11 21:28
添加回复
回到顶部