将 1 和 N 之间的数字连接起来,看它是否可以被 3 整除

Concatenate the numbers between 1 and N and see if it is divisible by 3

我正在尝试制作一个基本上像这样工作的程序: 我要求一个数字,我必须通过连接 1 和 N 之间的所有数字来从该数字形成数字 N。例如,如果我输入 12,数字 N 将为 123456789101112,或者如果我输入 6,则数字将是 123456。一旦 N 已经形成,我必须 return 如果 N 可以被 3 整除,我必须在屏幕上显示“是”,如果不能被 3 整除,我必须在屏幕上显示“否”。

这是我的:

n = int(input("Enter a number:"))

for x in range (n + 1):
if(n%3==0):
    print("YES")
else:
    print("NO")

我刚开始使用Python,我不知道我做错了什么,如果有人能帮助我,我将不胜感激!

答案将是:

if n%3 != 1:
    print("YES")
else:
    print("NO")

原因

每个数字都是(3*k+1)(3*k+2)(3*k)三种类型之一。如果一个数字的数字之和可以被 3 整除 a.k.a,则该数可以被 3 整除。它是 (3*k) 类型的数字。

如果输入为 1。那么 N 将为 1,这是一种 (3*k+1) 类型的数字,因此它不能被 3 整除。

当输入为2时,N为12,能被3整除

当输入为3时,N为123,能被3整除

同理,当输入为4时,N为1234,不能被3整除

如果你去一个,你会发现只要输入不是 (3*k+1) 类型的数字,N 就可以被 3 整除。

这是一种可能的解决方案。它显示了如何测试 n 输入和 val 连接值

n = int(input("enter a number: "))
# This line creates a list of numbers and
# then concatenates them as a new number in string format
val = "".join(str(x) for x in range(1, n + 1))

print(f"Is {n} divisible by 3? ")
print("no" if int(n) % 3 else "yes")

print(f"Is {val} divisible by 3? ")
print("no" if int(val) % 3 else "yes")

如果您想使用您描述的算法来完成它,那么一个简单(但不是很快)的方法就是:

n = int(input("Enter a number:"))    # get the number

stringNumber = ""
for x in range(1, n+1):
  stringNumber += str(x)             # join the string version of numbers 1...n into a string

intNumber = int(stringNumber)        # convert the string concatenation into an int

if (intNumber % 3 == 0):             # check if the int is divisible by 3
    print("YES")
else:
    print("NO")

如果您愿意,可以使用 join() 加快字符串连接速度:

stringNumber = "".join([str(digit) for digit in range(1,n+1)])

结果是一样的

但是,您可能还会注意到,如果一个数的各位数字之和能被 3 整除,则它能被 3 整除,因此您可以使用这样的算法:

n = int(input("Enter a number:"))    # get the number

sumOfDigits = sum([digit for digit in range(1,n+1)])   # sum numbers 1...n

if (sumOfDigits % 3 == 0):             # check if the int is divisible by 3
    print("YES")
else:
    print("NO")

您也可以编写一个带有列表理解的单行三级操作来执行此操作。

def check():
    n = int(input("Enter a number:"))
    return 'Yes' if int(''.join([str(i) for i in range(1,n+1)]))%3==0 else 'No'

check()
Enter a number:12

'Yes'

使用范围生成从 1 到 N 的数字,将它们转换为字符串并连接它们:

x    = 12
N    = int("".join(map(str,range(1,x+1))))
div3 = N%3 == 0

print("Is",N,"divisible by 3?",["NO","YES"][div3]) 

# Is 123456789101112 divisible by 3? YES