题目:
你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?
输入描述:
每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000
输出描述:
输出一个整数代表你至少需要的 CD 数量。
输入例子:
7 2 6
输出例子:
4
分析:1. 先求出一张专辑能存储的最大数目的t,count*s+count-1<=L,即count=(L+1)/(s+1),如果count%13==0。则count--;
2. 考虑余数n%t不等于0,也就是最后一张专辑的歌曲数会出现的情况。如果余数是13的倍数,可以考虑从倒数第二张专辑中借一首歌,但此时倒数第二张专辑的歌曲数如果能被13整除,这种情况只能再多出一张专辑。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { int n = in.nextInt(); // 总共n首歌曲 int s = in.nextInt(); // 每首歌占用时间 int l = in.nextInt(); // 每张CD的时间容量 int count = (l + 1 ) / (s + 1); // 每张CD存储的歌曲数 if(count > n) count = n; if(count % 13 == 0) { count --; } int sum = n / count; // 需要的专辑数 int yu = n % count; // 最后一张专辑歌曲数 if(yu != 0) { // 最后一张专辑数不等于0,余数肯定小于count, sum ++; // 所以如果余数能被13整除,可以向倒数第二张专辑借一首, if((count -1 == yu) && (yu % 13 == 0)) { // 但是若借后导致倒数第二张专辑歌曲数是13的倍数,就不能借 sum ++; // 此时只能 再多加一张专辑 } } System.out.println(sum); } } }