【python练习】N钱买N鸡算法优化

N钱买N鸡

Description

公鸡5元一只,母3元一只,小鸡a只1元,现有N元钱,要买N鸡,共有几种方案。

如a=3,N=100

则有:
公鸡数 母鸡数 小鸡数

0 25 75

4 18 78

8 11 81

12 4 84

故共4种方案。输出4即可。

Input

一行,a(表示小鸡a元一只) N表示N元钱共买N只鸡

Output

一行,方案数,若无方案则输出0

Sample Input 1

3 100

Sample Output 1

4

Hint

0<a<=10,100<=N<=10000

利用《中学生可以这样学Python》教材解法仍有一个测试点(测试点8)会超时,请读者继续探索更优化算法。

Source

中学生可以这样学Python

python解法

方法一:

a,N=map(int,input().split())
asum=0
for i in range(N//5+1):
    for j in range(N//3+1):
        k=N-i-j
        if 5*i+3*j+k/a==N and i+j+k==N:
            asum=asum+1
            print(i,j,k)
print(asum)

方法二:

a,N=map(int,input().split())
asum=0
for i in range(0,N+1,5):
    for j in range(0,N+1-i,3):
        k=N-i-j
        if i//5+j//3+k*a==N and i+j+k==N :
            asum=asum+1
print(asum)

方法三:

a,N=map(int,input().split())
asum1=0
for i in range(N//5+1):
    j=((a-1)*N-(5*a-1)*i)//(3*a-1)
    k=N-i-j
    #print(i,j,k)
    if j>=0 and k>=0 and ((a-1)*N-(5*a-1)*i)%(3*a-1)==0 and k%a==0:
        asum1=asum1+1
        #print(i,j,k)
print(asum1)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值