你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?
输入描述:
每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000
输出描述:
输出一个整数代表你至少需要的 CD 数量。
输入例子:
7 2 6
输出例子:
4
解题
理解不了
讨论中下面的程序还是比较好理解的
/** *1.每张CD可以容纳i首歌 *2.计算需要多少张CD **/ #include <iostream> using namespace std; int main() { long long n, s, l;//n首歌,每首s秒,CD容量l秒 long long i, z;//每张CD存i首歌,需要z张 while(scanf("%lld%lld%lld", &n, &s, &l) != EOF) { for(i=1; i*s+i-1<=l; i++);//计算1张CD可以存i首歌 i--; z=1; if(i % 13 == 0) {//每张CD不能存13的倍数首歌 i--; } for(z=1; i*z<n; z++);//计算需要多少张CD if((n % 13 == 0) && (n <= i)) {//针对n是13的倍数且1张CD就可以存所有歌曲的情况 z++; } if((i + n % i) >= (2 * i - 1)){//针对最后两张CD需要额外一张CD的情况 z++; } if((n == 1) && (s == 1) && (l == 1)){//单独考虑1,1,1 z=1; } cout << z << endl;; } return 0; }
理解不了
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);// 一张cd 可以放歌的数量 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); } } }