你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?
你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?
每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000
输出一个整数代表你至少需要的 CD 数量。
7 2 6
4
import java.util.*;
public class Main {
public static void main(String[] args) {
// 题目的输入时单行三大int数
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s = sc.nextInt();
int L = sc.nextInt();
System.out.println(countCD(n, s, L));
}
public static int countCD(int n, int s, int L) {
int res = 0;
// count表示每张CD的最多存歌数
int count = (int) (L+1) / (s+1);
count = Math.min(count, n);
// 如果CD存的歌被13整除了,那就少放一首
if (count % 13 == 0) {
count--;
}
// n首歌,每个CD有count首曲子,则共有res个CD
res = n / count;
// 余数是多出来没放下的歌
int yu = n % count;
if (yu != 0) {
// 有余数证明有歌没放下,就加一个CD呗
res++;
// 不管怎么找都要避免因为有余数所有单独给的一个CD,
// 保证这个CD不能放13的倍数首歌曲
// 且此时每个CD放的曲子数count和剩下的yu首曲子只差1首
// 如果不是只差一首,而是还有更多的空余,
// 那就完全可以从其他的一张CD拿过来一首,让它不是13的倍数即可
if (yu % 13 == 0 && (count - yu) == 1) {
res++;
}
}
return res;
}
}
通过率:45%。提示有一组测试用例不通过:58 4 163,提示应该输出2,我的结果输出3。想了好久,不就应该输出3吗?菜鸟一枚,请各位赐教~
附代码:
package JinRiTouTiao;
import java.util.Scanner;
public class ChuZhuanJi {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
while(scanner.hasNext()){
int n=scanner.nextInt();
int s=scanner.nextInt();
int l=scanner.nextInt();
int perNum=(l+1)/(s+1);
perNum=perNum%13==0?(perNum-1):perNum;
int sum=0;
if(n/perNum>=1){
sum+=n/perNum;
}
int left=n-sum*perNum;
if(left>0){
if(left%13==0){
sum+=2;
}
else{
sum+=1;
}
}
System.out.println(sum);
}
}
}
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int songNumber = in.nextInt();
int songPerLength = in.nextInt();
int cdPerLength = in.nextInt();
int songsInCD = (int) Math.floor((float) (cdPerLength + 1) / (songPerLength + 1));
songsInCD = Math.min(songNumber, songsInCD);
if(songsInCD % 13 == 0){
songsInCD -= 1;
}
int cdNumber = (int) Math.ceil((float) songNumber / songsInCD);
if(songNumber % songsInCD == 13 && (songsInCD * cdNumber - songNumber) == 1){
cdNumber += 1;
}
System.out.println(cdNumber);
}
}
}