Python组全国大学生计算机能力挑战赛3362

1、题目描述

设有下列的算式:
在这里插入图片描述
求出口中的数字,并打印出完整的算式来。

2、输入说明

无输入。

3、输出说明

输出共五行,每行对应图中算式从上到下从左到右的一个数。
具体来说:
输出的第一行对应图中算式中左上角的那个未知的两位数;
输出的第二行对应图中的那个未知的四位数;
输出的第三行对应图中的另外一个未知的两位数;
输出的第四行对应图中的位置靠上的那个未知的三位数;
输出的第五行对应图中的位置靠下的那个未知的三位数。

4、解题代码及思路

1、看图中的结果可以看出这个很像我们小学的时候做的一个除法运算,回忆一下除法运算的思路
2、然后看第一个输出要求是两个空格,说明除数是大于9,所以从10开始
3、第二个输出要求是一个四位数,可以得到除数与809的积大于999,小于10000(其实约束条件只要是小于10000就行,因为809乘一个两位是至少都是8090),然后看到最下面的1,证明四位数的被除数除以两位数的除数等于809还要余1(口口口口÷口口=809---14、通过遍历的方法可以得出只有三个两位数符合第一个输出要求,同时就有三个四位数符合第二个输出要求

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)) # 第五个输出三位数
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值