首页 > 试题广场 >

百鸡问题

[编程题]百鸡问题
  • 热度指数:45759 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
(本题没有测试数据,
int main(){}
就能通过
真·本地过了就是过了)


输入描述:
    测试数据有多组,输入n。


输出描述:
    对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
示例1

输入

40

输出

x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99
while True:
    try:
        n=int(input().strip())
        #print(n)
        num1=n//5
        num2=n//3
        #num3=n*3
        for x in range(num1+1):
            for y in range(num2+1):
                num=n-x*5-3*y
                if num>0:
                    z=100-x-y
                    if 3*num>=z:
                        print('x='+str(x)+','+'y='+str(y)+','+'z='+str(z))
    except:
        break
编辑于 2019-07-28 14:11:05 回复(0)

并不是无脑循环,循环次数较少,这循环次数差不多是最少了,还能再优化吗?

def findHundredChicken(x,y,z,price):   #递归增加小鸡,减少小小鸡,输出
    if 5*x+3*y+1/3*z <= price:         #价格超出后不再递归
        print("x=%d,y=%d,z=%d"%(x,y,z))
        findHundredChicken(x,y+1,z-1,price)

try:
    while True:
        num = int(input())
        for i in range(101):    #在这里循环到大鸡最多能买的个数
            if (num-i*5)*3<100-i:    
                break
            findHundredChicken(i,0,100-i,num)        #始终保持百鸡
except Exception:
    pass
编辑于 2018-09-18 15:00:46 回复(0)
try:
    while 1:
        n = input()
        for x in xrange(101):
            for y in xrange(101):
                if 14 * x + 8 * y <= 3 * n - 100:
                    print 'x={a},y={b},z={c}'.format(a = x, b = y, c = 100 - x - y)
except:
    pass

发表于 2016-12-26 23:32:42 回复(0)