假设我们有一个巨大的数字,我们必须找出数字的任何排列是否可以被 8 整除。数字以字符串格式提供给我们。
所以,如果输入是这样的:input_num = 4696984,那么输出将是“被八整除”。
为了解决这个问题,我们将用数字的数字检查所有可能的三位数排列,看看它们是否可以出现在数字的任何全数字排列中。如果一个可以被 8 整除的三位数排列出现在该数的一个全数排列的末尾,我们就会说这个排列可以被 8 整除。
为了解决这个问题,我们将按照以下步骤操作 -
如果 input_num 的长度 < 3,则
返回真
返回真
如果 input_num mod 8 与 0 相同,则
input_num := input_num 的反向
如果 input_num mod 8 与 0 相同,则
返回错误
temp_arr := 由 0 初始化的大小为 10 的新列表。
对于范围 0 到 input_num 大小的计数,请执行
temp_arr[input_num[count] - 0] := temp_arr[input_num[count] - 0] + 1
对于 104 到 999 范围内的计数,增加 8,执行
进行下一次迭代
进行下一次迭代
进行下一次迭代
温度 := 计数
出现次数:= 大小为 10 的新列表,初始化为 0。
出现次数[临时模 10] := 出现次数[临时模 10] + 1
温度 := 温度 / 10
出现次数[临时模 10] := 出现次数[临时模 10] + 1
温度 := 温度 / 10
出现次数[临时模 10] := 出现次数[临时模 10] + 1
温度 := 计数
如果出现[temp mod 10] > temp_arr[temp mod 10],则
温度 := 温度 / 10
如果出现[temp mod 10] > temp_arr[temp mod 10],则
温度 := 温度 / 10
如果出现[temp mod 10] > temp_arr[temp mod 10],则
返回真
返回错误
让我们看看以下实现以获得更好的理解 -
def solve(input_num): if len(input_num) < 3: if int(input_num) % 8 == 0: return True input_num = input_num[::-1] if int(input_num) % 8 == 0: return True return False temp_arr = 10 * [0] for count in range(0, len(input_num)): temp_arr[int(input_num[count]) - 0] += 1 for count in range(104, 1000, 8): temp = count occurences = 10 * [0] occurences[int(temp % 10)] += 1 temp = temp / 10 occurences[int(temp % 10)] += 1 temp = temp / 10 occurences[int(temp % 10)] += 1 temp = count if (occurences[int(temp % 10)] > temp_arr[int(temp % 10)]): continue temp = temp / 10 if (occurences[int(temp % 10)] > temp_arr[int(temp % 10)]): continue temp = temp / 10 if (occurences[int(temp % 10)] > temp_arr[int(temp % 10)]): continue return True return False if solve("4696984"): print("Divisible by eight") else: print("Not divisible by eight")
4696984输出结果
Divisible by eight