门票号是由0~6组成的六位数(0~6这几个数字可重用) 每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的) 每一个门票号相邻的两位相差必须在四以下(<4)(如016245是不行的) 要求至少有以下三个子函数。主函数读入数据范围,对区间的每个数调三个子函数。 子函数1,参数为n,判断数字n是否有三个连续相同的数字。 子函数2,参数为n,判断数字n相邻的两位差是否在4以下。 子函数3,参数为n,判断数字n是否所有位在0-6之间。 输入 第一行一个n,代表输入个数 接下去n行,每行两个数字x,y(x <= y) 输出 对于每个测试,输出x到y之间的门票编号。每个测试结尾之间空行。
时间: 2024-03-02 14:49:54 浏览: 81
计算票数程序
以下是完整的 Python 代码实现:
```python
def has_three_consecutive_digits(n):
s = str(n)
for i in range(len(s)-2):
if s[i] == s[i+1] == s[i+2]:
return True
return False
def has_adjacent_digits_difference_less_than_4(n):
s = str(n)
for i in range(len(s)-1):
if abs(int(s[i]) - int(s[i+1])) >= 4:
return False
return True
def is_all_digits_between_0_and_6(n):
s = str(n)
for d in s:
if int(d) < 0 or int(d) > 6:
return False
return True
def count_valid_tickets(start, end):
valid_tickets = []
for i in range(start, end+1):
if not has_three_consecutive_digits(i) \
and has_adjacent_digits_difference_less_than_4(i) \
and is_all_digits_between_0_and_6(i):
valid_tickets.append(i)
return valid_tickets
n = int(input())
for i in range(n):
x, y = map(int, input().split())
valid_tickets = count_valid_tickets(x, y)
for ticket in valid_tickets:
print(ticket)
print()
```
在这个代码中,我们首先定义了三个子函数 `has_three_consecutive_digits`、`has_adjacent_digits_difference_less_than_4` 和 `is_all_digits_between_0_and_6`,与之前的代码实现相同。
然后,我们定义了一个主函数 `count_valid_tickets`,该函数接受两个参数 `start` 和 `end`,表示门票号的范围。在函数中,我们使用一个列表 `valid_tickets`,对于每一个门票号,如果它满足所有三个条件,则将其添加到列表中。最后,函数返回列表。
在主程序中,我们首先读入一个整数 `n`,表示输入个数。接下来的 `n` 行中,每行包含两个整数 `x` 和 `y`,表示门票号的范围。对于每个测试,我们调用 `count_valid_tickets` 函数计算符合要求的门票号,并将结果逐个输出。注意,每个测试的输出之间需要有一个空行。
希望对你有帮助!
阅读全文