输入正整数n,求n以内能被17 整除的最大正整数

输入正整数n,求n以内能被17 整除的最大正整数

描述
获得用户输入的一个正整数,输出能被17整除的最大正整数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

输入输出示例:

输入输出
1917
6651

方法一:

x = int(input("请输入一个正整数:"))
for i in range(x, 0, -1):
    if i%17 == 0:
        print("{}是能被17整除的最大正整数。".format(i))
        break

方法二:

x = int(input("请输入一个正整数:"))
while x > 0:
    if x%17 == 0:
        print("{}是能被17整除的最大正整数。".format(x))
        break
    x -= 1
  • 22
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 假设输入正整数为n,我们可以从n开始逐个往下找能被17整除的数,直到找到第一个能被17整除的数为止。因为我们是从大到小找的,所以找到的第一个能被17整除的数就是n以内能被17整除最大正整数。具体实现可以用循环来实现,代码如下: ``` n = int(input("请输入一个正整数:")) for i in range(n, , -1): if i % 17 == : print("n以内能被17整除最大正整数为:", i) break ``` 运行结果如下: ``` 请输入一个正整数:50 n以内能被17整除最大正整数为: 34 ``` 注意,如果输入正整数n本身就能被17整除,那么n就是n以内能被17整除最大正整数。因此,在循环中需要加上一个特判,代码如下: ``` n = int(input("请输入一个正整数:")) if n % 17 == : print("n以内能被17整除最大正整数为:", n) else: for i in range(n, , -1): if i % 17 == : print("n以内能被17整除最大正整数为:", i) break ``` 运行结果如下: ``` 请输入一个正整数:51 n以内能被17整除最大正整数为: 34 ``` ### 回答2: 题目要出n以内能被17整除最大正整数,那么我们可以先从最大能被17整除的数开始向下枚举,找到第一个小于等于n的数即可。 首先,我们知道所有能被17整除的数,都可以表示为17的倍数。因此,我们可以从n开始逆序枚举,直到找到一个能被17整除的数。 具体而言,我们可以通过模运算对n取余,得到n对17的余数。如果余数为0,说明n是17的倍数,直接返回n即可;否则,我们将n减去n对17的余数,得到的结果就是小于等于n的最大能被17整除的数。 例如,如果输入n=100,我们可以算得100对17的余数为15。因为15不等于0,所以我们将100减去15得到85,即小于等于100的最大能被17整除的数是85。 综上所述,n以内能被17整除最大正整数的具体步骤为: 1. 对n进行取模运算,得到n对17的余数; 2. 如果余数为0,直接返回n; 3. 否则,将n减去n对17的余数,得到的结果即为小于等于n的最大能被17整除正整数。 代码如下: ``` def max_divisible_by_17(n): remainder = n % 17 if remainder == 0: return n else: return n - remainder # 测试 print(max_divisible_by_17(100)) # 输出85 ``` ### 回答3: 首先,我们可以通过反向枚举法来解决这个问题。假设n是我们输入正整数,假设m是n以内能被17整除最大正整数,即m<=n,且m是17的倍数。 我们可以从n开始反向枚举,然后找到第一个能被17整除的整数,即m=n%17==0时,m就是所的答案。如果没有找到能被17整除的整数,那么m就等于0。 为什么可以使用反向枚举法呢?因为我们要的是n以内能被17整除最大正整数,所以从n开始反向枚举可以更快地找到答案。 以上是一种简单有效的解法,时间复杂度为O(1),因为只需要一次运算就能够得到结果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值