你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 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); } } }