js解决出专辑问题

你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?

输入描述:
每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000

输入样例:
7 2 6

输出:
4
JavaScript解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<code lang="js">
while(input = readline()){
var lines = input.split(" ");
var n = parseInt(lines[0]);
var s = parseInt(lines[1]);
var L = parseInt(lines[2]);
var x; //设每张CD收录x首歌
x=(L+1)/(s+1);
x = Math.floor(x); //求出x
var ans = Math.ceil(n/x); //求出非特殊条件下的结果
if( x%13 == 0 ){
x = x-1; //如果x是13倍数,那么每张CD都要少收录1首
ans = Math.ceil(n/x);
}
if( n < x && n%13 == 0 ){
ans = 2;//如果仅需要一张CD但是收录了13倍数的歌曲需要加一张
}
if( (n-(ans-1)*x)%13 == 0 && x-(n-(ans-1)*x) == 1 ){
//如果最后一张CD是13的倍数【(n-(ans-1)*x)%13 == 0】,可以把前一张拿过来一首,但是拿过来后前一张又可能会是13的倍数
//这时候也需要再加一张CD,比如这样的情况“14 14 13” “27 27 27 26”
//这样情况的条件是最后一个必须比前一个少1【x-(n-(ans-1)*x) == 1】
//所以满足上述两项条件的时候总CD需要加1
ans += 1;
}
print(ans);
}
</code>

java解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;

public class Main{

public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
int s = in.nextInt();
int l = in.nextInt();
int count = (l+1)/(s+1);
count = Math.min(n, count);
if(count%13==0){
count--;
}
int sum = n/count;
int yu = n%count;
if(yu!=0){
sum++;
if(yu%13==0&&(count-yu)==1){//查看最后最后一张专辑的情况
sum++;
}
}
System.out.println(sum);
}
}
}