枚举

枚举算法实例

例一:百钱买白鸡
1,问题描述:
公鸡每只5元,母鸡每只3元,三只小鸡1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?
2,算法分析:
利用枚举法解决该问题,以三种鸡的个数为枚举对象,分别设为mj,gj,xj,
用三种鸡的总数 (mj+gj+xj=100)和买鸡钱的总数(1/3xj+mj3+gj*5=100)作为判定条件,穷举各种鸡的个数。

mj=0;gj=0;xj=0
for gj in range(21):
    for mj in range(34):
        xj=100-mj-gj
        if xj%3==0 and 5*gj+3*mj+1/3*xj==100:
            print('公鸡为%d只,母鸡为%d只,小鸡为%d只'%(gj,mj,xj))
    pass

例二:使用枚举法解决“填写运算符问题”
1,问题描述:在下面的算式中,添加“+”、“-”,“*”,“/”,4个运算符,使得这个式子成立。
5  5  5  5  5=5
2,算法分析:
上述式子左侧有5个数字,一共需要4个运算符。根据题目要求,两个数字之间的运算符只能有4中选择。
在具体编程时,可以通过循环来填入各种运算符,然后再判断算式左侧的值是否等于右侧的值。
并保证,当填入的 是除号时,则右侧的数不能为0,并且乘除的优先级高于加减的优先级。

#使用枚举法解决"填写运算符问题"
oper=['','+','-','*','/']   #运算符
i=[None]*5  #表示4个位置
num=[None]*6 #表示5个数
count=0 #用于计数
result=0 # 等于结果
print('输入5个数:')
for j in range(1,6):
    num[j]=int(input())
print('输入结果:')
result=int(input())

for i[1] in range(1,5): #每个空有4种可能,依次遍历,1代表 +,2代表 -,3代表 *,4代表 /
    if i[1]<4 or num[2]!=0:#当第1个空运算符不为/或者第二个数不为0时
        for i[2] in range(1, 5):
            if i[2] < 4 or num[2] != 0:#当第2个空运算符不为/或者第二个数不为0时
                for i[3] in range(1, 5):
                    if i[3] < 4 or num[2] != 0:#当第3个空运算符不为/或者第二个数不为0时
                        for i[4] in range(1, 5):
                            if i[4] < 4 or num[2] != 0:#当第4个空运算符不为/或者第二个数不为0时
                                left = 0
                                right = num[1]
                                sign=1
                                #将4种运算符填到对应的空格位置,并进行计算
                                for j in range(1,5):
                                   if oper[i[j]]=='+':
                                       left=left+sign*right
                                       sign=1
                                       right=num[j+1]
                                   elif oper[i[j]]=='-':
                                       left=left+sign*right
                                       sign=-1
                                       right=num[j+1]
                                   elif oper[i[j]]=='*':
                                       right=right*num[j+1]
                                   elif oper[i[j]]=='/':
                                       right=right/num[j+1]

                                if left+sign*right==result:
                                    count+=1
                                    print('%3d'%count,end=': ')
                                    for j in range(1,5):
                                        print('%d%s'%(num[j],oper[i[j]]),end='')
                                    print('%d=%d\n'%(num[5],result))
    if count==0:
        print('没有找到符合要求的方法')

你可能感兴趣的:(算法,算法)