解方程

mac2025-04-19  2

题目描述

  设x为一个十进制正整数,定义s(x)为x的每一位上的数字之和,如s(123) = 1+2+3 = 6 对于如下方程:x = b*(s(x)^a)+c 给出a,b,c的值,要求找出[1,999999999]内所有符合条件的x,并从小到大输出

输入数据

  三个正整数,分别代表a,b,c 1<=a<=5 1<=b<=10000 -10000<=c<=10000

输出数据

  第一行为一个正整数n,代表符合条件的x的个数 第二行为n个递增的数,代表所有符合条件的x

样例输入 3 2 8 样例输出 3 10 2008 13726
程序分析
解题思路
寻找枚举变量:不要使用变量x,而是,变量x上各位数字之和bitSum满足 x = b*(s(x)a)+c的等式,x的取值范围,限制了temp=b*(s(x)a)+c的取值也为[1,999999999]若 x = b*(s(x)a)+c,则s(x)=s( b*(s(x)a)+c ) 因为,x_bitSum == s(x) 所以,x_bitSum == s(_temp)
代码1(暴力枚举变量x,数量级的大的数据,耗时特别长)
a, b, c = map(int, input().split()) total = 0 numList = [] for i in range(1, 1000000000): temp = sum(list(map(int, str(i)))) if b * pow(temp, a) + c == temp: numList.append(temp) total += 1 print(total) for i in range(total - 1): print(numList[i], end=" ") print(numList[total - 1])
代码2(将变量x的各位数字之和作为枚举变量)
def judge(_temp, x_bitSum): # 若x = b*(s(x)^a)+c, 则s(x)=s(b*(s(x)^a)+c) sum = 0 # 即x_bitSum == s(_temp) while _temp > 0: sum += _temp % 10 _temp //= 10 # " / "就表示 浮点数除法,返回浮点结果;" // "表示整数除法。 return sum == x_bitSum a, b, c = map(int, input().split(" ")) numList = [] for bitSum in range(1, 82): # x的范围是[1,999999999],则s(x)的范围是[1,81] temp = b * pow(bitSum, a) + c # 满足 x = b*(s(x)^a)+c的等式,x的取值范围,限制了temp=b*(s(x)^a)+c的取值为[1,999999999] if 1 <= temp <= 999999999 and judge(temp, bitSum): numList.append(temp) print(len(numList)) for i in range(len(numList)-1): print(numList[i], end=" ") print(numList[len(numList)-1])
最新回复(0)