首页 > 试题广场 >

出专辑

[编程题]出专辑
  • 热度指数:10861 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

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


输入描述:

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



输出描述:

输出一个整数代表你至少需要的 CD 数量。

示例1

输入

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;
        }
}

发表于 2021-07-18 21:53:44 回复(0)
通过率: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);
		}
	}
}


编辑于 2017-03-29 20:46:25 回复(1)
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);
        } 
    }
}

发表于 2016-08-09 12:08:28 回复(0)
import java.util.Scanner;

public class Main{

public Main() {
}

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 size = getMaxSize(s, n, L);
int reslut = n % size == 0 ? n / size : n / size + 1;
if (n % size != 0 && (n % size) % 13 == 0 && n % size == size - 1)
reslut += 1;
System.out.println(reslut);
}
scanner.close();
}

public static int getMaxSize(int s, int n, int L) {
int temp = (L + 1) / (s + 1) > n ? n : (L + 1) / (s + 1);
return temp % 13 == 0 ? temp - 1 : temp;
}
}

发表于 2016-07-30 17:21:31 回复(0)