将 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
我正在尝试制作一个基本上像这样工作的程序: 我要求一个数字,我必须通过连接 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