64,656
社区成员
发帖
与我相关
我的任务
分享
int GetMinDiscCount(int n, int m, int s)
{
const int distTime = 1; // 间隔时间 1s
int musicPerDisc = (s+distTime)/(m+distTime); // 每张盘放的歌的数量
if(musicPerDisc % 13 == 0) // 对于13的迷信问题处理
--musicPerDisc;
int discCount = n/musicPerDisc; // 唱片数量
int otherMusic = n - musicPerDisc * discCount; // 当前唱片数量下剩余的music数量,这些已不足一张唱片了
if(otherMusic != 0) // 增加剩余music数量不为0的处理
{
/* 经测试,只有一种情形比较特殊:当剩余数量是13的倍数,且与其他盘数量相差为1或无盘分配时,需要扩充2个盘
* 如用例:53 2 80 */
if(otherMusic % 13 == 0 && (discCount == 0 || musicPerDisc - otherMusic == 1))
discCount += 2;
else
++discCount;
}
return discCount;
}
int GetMinDiscCount(int n, int m, int s)
{
const int distTime = 1; // 间隔时间 1s
int musicPerDisc = (s+distTime)/(m+distTime); // 每张盘放的歌的数量
if(musicPerDisc % 13 == 0) // 对于13的迷信问题处理
--musicPerDisc;
int discCount = n/musicPerDisc; // 唱片数量
int otherMusic = n - musicPerDisc * discCount; // 当前唱片数量下剩余的music数量,这些已不足一张唱片了
if(otherMusic != 0) // 增加剩余music数量不为0的处理
{
if(otherMusic % 13 == 0) // 要注意剩余的唱片数量是否是13的倍数
discCount += 2;
else
++discCount;
}
return discCount;
}
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d\t %d\t %d\t -> %d\n", 26, 1, 100, GetMinDiscCount(26, 1, 100));
srand((unsigned int)time(NULL));
for(int i = 0; i < 30; i++)
{
int n = rand()%100 + 1;
int s = rand()%10000 + 1;
int m = rand()%s + 1;
printf("%d\t %d\t %d\t -> %d\n", n, m, s, GetMinDiscCount(n, m, s));
}
system("pause");
return 0;
}
int GetMinDiscCount(int n, int m, int s)
{
const int distTime = 1; // 间隔时间 1s
int musicPerDisc = (s+distTime)/(m+distTime); // 每张盘放的歌的数量
if(musicPerDisc % 13 == 0) // 对于13的迷信问题处理
--musicPerDisc;
int discCount = n/musicPerDisc; // 唱片数量
int otherMusic = n - musicPerDisc * discCount; // 当前唱片数量下剩余的music数量,这些已不足一张唱片了
if(otherMusic % 13 == 0) // 要注意剩余的唱片数量是否是13的倍数
discCount += 2;
else
++discCount;
return discCount;
}
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d\t %d\t %d\t -> %d\n", 26, 1, 100, GetMinDiscCount(26, 1, 100));
srand((unsigned int)time(NULL));
for(int i = 0; i < 30; i++)
{
int n = rand()%100 + 1;
int s = rand()%10000 + 1;
int m = rand()%s + 1;
printf("%d\t %d\t %d\t -> %d\n", n, m, s, GetMinDiscCount(n, m, s));
}
system("pause");
return 0;
}
// n-歌曲数目
// m-歌曲长度
// S-光盘容量
// t-时间间隔
int GetNumber(int n,int m,int s,int t)
{
int count;
int nn=n+1;
int mm=m;
int i=1;
count=n>0;
while(i<nn)
{
if(i%13==0)
{
nn++;
count++;
mm=m;
continue;
}
if(mm>s)
{
count++;
mm=m;
continue;
}
mm+=m+t;
}
return count;
}
//应用举例
void main()
{
int pNum=GetNumber(64,180,900,1);
}
// n-歌曲数目
// m-歌曲长度
// S-光盘容量
// t-时间间隔
int GetNumber(int n,int m,int s,int t)
{
int count=0;
int nn=n+1;
int mm=m;
int i=1;
while(i<nn)
{
if(i%13==0)
{
nn++;
count++;
mm=m;
continue;
}
if(mm>s)
{
count++;
mm=m;
continue;
}
mm+=m+t;
}
}
//应用举例
void main()
{
int pNum=GetNumber(64,180,900,1);
}
#include <iostream>
using namespace std;
/*
现在有n首歌,每首歌的长度都是m秒,而一块唱片共可存储s秒长度的音乐。
但在存音乐的过程中,我们要求两首歌之间有1秒的间隔。而且存歌的人很迷信,一张唱片存的歌曲数不得为13的倍数。
*/
int m,n,s;
int getOnePiece()
{
int cnt=s/m,space=s%m;
if(space>=cnt-1) //there are enough secs to seperate each song
{
if(cnt%13==0)
{
return cnt-1;
}
else
{
return cnt;
}
}
for(cnt=cnt-1,space=space+m;cnt>=1;--cnt,space=space+m)
{
if(space>=cnt-1)
{
if(cnt%13==0)
{
return cnt-1;
}
else
{
return cnt;
}
}
}
return cnt; //cnt==0
}
int main()
{
cin>>n>>m>>s;
int cnt=getOnePiece();
if(n%cnt==0)
{
cout<<n/cnt<<endl;
}
else
{
cout<<(n/cnt)+1<<endl;
}
return 0;
}
/ n-歌曲数目
// m-歌曲长度
// S-光盘容量
// t-时间间隔
int GetNumber(int n,int m,int s,int t)
{
int count;
int nn=n+1;
int mm=m;
int i=1;
count=n>0;
for(int i=0;i<nn;i++)
{
/*如果是13的倍数首并且多装一首都不够,或者当前这首就不够,那么要换新碟了
if(((i%13==0)&&(mm+m+t)>s)||mm>s)
{
count++;
mm=m;
}
else mm+=m+t;
i++;
}
return count;
}
//应用举例
void main()
{
int pNum=GetNumber(64,180,900,1);
}