def is_narcissistic(num):
"""判断一个数是否是水仙花数"""
if num < 100 or num> 999:
return False
digits = [int(d) for d in str(num)]
return sum(d ** 3 for d in digits) == num
def backtrack(s, start, path, results):
"""回溯法尝试所有可能的分割方式"""
if start == len(s):
results.append(path)
return
for i in range(start + 1, len(s) + 1):
substring = s[start:i]
ascii_sum = sum(ord(c) for c in substring)
if is_narcissistic(ascii_sum):
backtrack(s, i, path + [substring], results)
def split_string(s):
"""分割字符串并返回结果"""
results = []
backtrack(s, 0, [], results)
if not results:
return 0
if len(results) > 1:
return -1
return len(results[0])
# 读取输入
s = input().strip()
# 计算并输出结果
print(split_string(s))
方法思路
- 水仙花数判断:首先,我们需要一个函数来判断一个数是否是水仙花数。
- 字符串分割:使用回溯法尝试所有可能的分割方式,确保每个子串的ASCII码值的和是水仙花数。
- 结果判断:根据分割结果是否成功以及是否唯一,返回相应的结果。