1、题目描述
设有下列的算式:
求出口中的数字,并打印出完整的算式来。
2、输入说明
无输入。
3、输出说明
输出共五行,每行对应图中算式从上到下从左到右的一个数。
具体来说:
输出的第一行对应图中算式中左上角的那个未知的两位数;
输出的第二行对应图中的那个未知的四位数;
输出的第三行对应图中的另外一个未知的两位数;
输出的第四行对应图中的位置靠上的那个未知的三位数;
输出的第五行对应图中的位置靠下的那个未知的三位数。
4、解题代码及思路
1、看图中的结果可以看出这个很像我们小学的时候做的一个除法运算,回忆一下除法运算的思路
2、然后看第一个输出要求是两个空格,说明除数是大于9,所以从10开始
3、第二个输出要求是一个四位数,可以得到除数与809的积大于999,小于10000(其实约束条件只要是小于10000就行,因为809乘一个两位是至少都是8090),然后看到最下面的1,证明四位数的被除数除以两位数的除数等于809还要余1(口口口口÷口口=809---1)
4、通过遍历的方法可以得出只有三个两位数符合第一个输出要求,同时就有三个四位数符合第二个输出要求
num = 809
List_1 = []
List_2 = []
one = 10 #假设第一个输出要求是最小的两位数10
# 循环条件为num * one < 10000也可以,分别加入到列表中
while 999 < num * one < 10000:
List_1.append(one)
List_2.append((num * one) + 1)
one += 1
# 通过遍历和题目条件给出约束
for i in range(len(List_1)):
# 位置靠上的三位数 - 位置靠下的三位数 == 1
condition_1 = (((List_2[i] // 100) - (8 * List_1[i])) * 100) + (List_2[i] % 100) - (List_1[i] * 9) == 1
# 因为两个是三位数,所以要筛选掉那些不符合的
condition_2 = 99 < (List_1[i] * 9) < 1000
condition_3 = 99 < (((List_2[i] // 100) - (8 * List_1[i])) * 100) + (List_2[i] % 100) < 1000
if condition_1 and condition_2 and condition_3:
print(List_1[i]) # 第一个输出两位数
print(List_2[i]) # 第二个输出四位数
print((8 * List_1[i])) # 第三个输出两位数
print((((List_2[i] // 100) - (8 * List_1[i])) * 100) + (List_2[i] % 100)) # 第四个输出三位数
print((List_1[i] * 9)) # 第五个输出三位数