在网站里面跑不出来 不过可以代入数据进行验算 都是对的


nc=list(map(int,input().split()))
N=nc[0]#N种金额
C=nc[1]#每种金额硬币的数量
# print(N)输出检测
# print(C)输出检测
Vlist=[]  #记录小于c的硬币面额(0为无,1为有)
Blist=[]  #记录小于c的硬币面额的数量
for i in range(100000000):#初始化列表
   Vlist.append(0)
   Blist.append(0)
Vlist1=[]  #存储小于c硬币面额(排序后的)
Blist1=[]  #存储小于c的硬币数量(排序后的)
number=0  #提供的星期数量
N1=0 #面额小于c的硬币种类数
V=[] #面额
V1=[] #小于c的面额
B=[] #硬币数
for i in range(N):
   X=list(map(int, input().split())) #输入硬币面额和对应数量
   V.append(X[0]) #存入硬币面额
   B.append(X[1]) #记录对应面额的数量
# print(V)输出检测
# print(B)输出检测
for i in range(N):
   if V[i]>=C: #面额大于C的直接加上去
       number=number+B[i]
   else :#列表值为0的代表无,1的代表有。下标i对应硬币的面额C
       V1.append(V[i])
       Vlist[V[i]]=1 #对于小于c的硬币面额,修改为1。下标V[i]对应硬币的面额C
       Blist[V[i]]=B[i]#下标V[i]对应硬币的面额C
       N1=N1+1
       # print(Vlist[V[i]])输出检测
       # print(Blist[V[i]])输出检测
for i in range(100000000):  #对于小于c的硬币面额 进行存储 简化后续计算
   if Vlist[i]==1:  #列表值为0的代表无,1的代表有。下标i对应硬币的面额C
       Vlist1.append(i)
       Blist1.append(Blist[i])
       # print(Vlist1)输出检测
       # print(Blist1)输出检测
# print(number)  输出检测
# print(V1)输出检测
# print(B1)输出检测
# print(N1)输出检测
while True:
   c=C  #记录每使用一种硬币,剩下所需的支付金额
   for i in range(len(Vlist1)-1,-1,-1): #从大的开始减
       while(c>Vlist1[i] and Blist1[i]>0):
           c=c-Vlist1[i]
           Blist1[i]=Blist1[i]-1
   for i in range(len(Vlist1)):  #从小的开始减
       while(c>0 and Blist1[i]>0):
           c=c-Vlist1[i]
           Blist1[i]=Blist1[i]-1
   if c<=0:  #金额支付足够则星期数加一
       number=number+1
   else :    #不足以支付则跳出循环
       break
print(number)


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论