Python解题:输入一个超过1位的整数n,数一数已经有多少种方法,恰好修改一位数字,将n变成完全平方数(不能将首位修改为0),将这些数字从小到大输出。
时间: 2024-05-22 13:12:29 浏览: 144
思路:遍历n的每一位,将该位数字1~9依次替换,判断替换后的数是否为完全平方数,若是则计数并存入列表,最后将列表排序输出。
代码如下:
import math
n = int(input("请输入一个超过1位的整数:"))
cnt = 0 # 计数器,记录符合条件的数的个数
lst = [] # 存放符合条件的数的列表
# 遍历n的每一位
for i in range(len(str(n))):
# 获取n的第i位数字
digit = int(str(n)[i])
# 替换n的第i位数字为1~9
for j in range(1, 10):
# 不能将首位修改为0
if i == 0 and j == 0:
continue
# 替换数字
new_num = str(n)[:i] + str(j) + str(n)[i+1:]
# 判断替换后的数是否为完全平方数
if int(math.sqrt(int(new_num))) ** 2 == int(new_num):
cnt += 1
lst.append(int(new_num))
# 将符合条件的数从小到大排序输出
lst.sort()
for num in lst:
print(num, end=' ')
print("\n共有{}种方法。".format(cnt))
相关问题
给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次或两次以上。 找出只出现一次的那两个元素。你可以按任意顺序返回答案。
题目描述:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次或两次以上。 找出只出现一次的那两个元素。你可以按任意顺序返回答案。
解题思路:使用异或运算,将所有元素异或起来,得到的结果就是两个只出现一次的元素异或的结果。因为这两个元素不相同,所以异或结果中至少有一位是1,找到这个1所在的位置,然后将数组中所有元素按照这个位置是否为1分成两组,这样两个只出现一次的元素就被分到了不同的组中,然后对每组中的元素分别异或,得到的结果就是这两个只出现一次的元素。
参考代码:
```python
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
xor = 0
for num in nums:
xor ^= num
mask = 1
while xor & mask == 0:
mask <<= 1
a, b = 0, 0
for num in nums:
if num & mask == 0:
a ^= num
else:
b ^= num
return [a, b]
```
阅读全文