def is_pal(i_):
i_s = str(i_)
if i_s == i_s[::-1]:
return True
else:
return False
n=int(input("输入大于10的数:"))
i = 10
while i < n:
if is_pal(i):
print(i)
i += 1
import time
def is_pal(i_):
i_s = str(i_)
if i_s == i_s[::-1]:
return True
else:
return False
def sum_i(i):
s = 0
i_s = str(i)
for j in range(len(i_s)):
s += int(i_s[j])
return s
n = int(input())
start = time.time()
i = 10000
while i < 1000000:
if is_pal(i):
if sum_i(i) == n:
print(i)
i += 1
end = time.time()
print("耗时{}秒".format(end - start))
3.A+B案例
问题描述:输入12,32,输出44,案例如下:
a, b = map(int, input().split(","))
print(a + b)
4.数组排序
问题描述:输入5,1,3,2,4
输出1 2 3 4 5,案例如下:
n = int(input("输入数列的长度:"))
arr = list(map(int, input("输入数列以逗号分割:").split(',')))
arr.sort()
for i in range(n):
print(arr[i], end=' ')
import time
n = int(input("输入你要计算的整数之和:"))
start=time.time()
s = n * (n + 1) / 2 # 等差数列公式,节省很多时间
print('%d' % s)
end=time.time()
print('总运行耗时: %s 秒'%(end-start))
n = int(input("输入你要计算的整数之和:"))
starts=time.time()
s=0
for i in range(n):
i+=1
s+=i
print(s)
ends=time.time()
print('总运行耗时: %s 秒'%(ends-starts))
事实证明我们在设计算法的时候要避免出现循环,如果循环次数过多的话,时间上没有优势!
6.十六进制转八进制
问题描述:先输入你想要转换多少次,然后依次输入一个十六进制的数,输出一个八进制的数,案例如下:
t = int(input("输入你要转换的次数:"))
# print(t)
for i in range(t):
n = input("输入十六进制的数字:")
# ans = oct(int(n, 16))
# print(ans[2:])
ans = format(int(n, 16), 'o')
print(ans)
n = int(input("输入数组长度:"))
arr = input("输入数组按照逗号分割:").split(',')
a = input("输入你要查找的数字:")
i = 0
for i in range(n):
if a == arr[i]:
i += 1
print("{}出现了{}次".format(a,i))
def is_nar(i_):
a = i_ % 10 # 取余
b = int((i_ / 10)) % 10 # 百位 注意Python中除法一定会得到浮点数 要取整 而C中则不需要
c = int(i_ / 100)
if i_ == a ** 3 + b ** 3 + c ** 3:
return True
else:
return False
i = 100
while i < 1000:
if is_nar(i):
print(i)
i += 1
n = int(input())
k = 2
triangle_yang = [] # 杨辉三角
for i in range(n): # 定义空的杨辉三角
triangle_yang.append([0 for j in range(i+1)])
for i in range(n): # 第一列和每一行的最后一个为1
triangle_yang[i][0] = triangle_yang[i][-1] = 1
while k < n:
m = 1
while m < k: # 两肩数值之和
triangle_yang[k][m] = triangle_yang[k-1][m-1] + triangle_yang[k-1][m]
m += 1
k += 1
for i in range(n): # 输出杨辉三角
for j in range(i+1):
print(triangle_yang[i][j], end=' ')
print()
11.数列特征提取
问题描述:输入一系列数组,然后输出最大最小值,总和,案例如下:
arr = input("按照逗号分割输入一些数组:").split(',')
n=len(arr)
print("最大值:",max(int(arr[i]) for i in range(n))) # 最大值
print("最小值:",min(int(arr[i]) for i in range(n))) # 最小值
print("总和::",sum(int(arr[i]) for i in range(n))) # 求和
12.字母图形
问题描述:输入几行几列的数组类别,输出该数组,按照字母的特定的规律排列组合,案例如下:
n, m = map(int, input("输入几行几列按照逗号分割:").split(','))
graph = [[0 for j in range(m)] for i in range(n)] # 空二维数组
for i in range(n):
for j in range(m):
if j >= i: # 数组中字母规律
graph[i][j] = chr(ord('A') + j - i)
else:
graph[i][j] = chr(ord('A') + i - j)
for i in range(n): # 输出二维数组
for j in range(m):
print(graph[i][j], end='')
print()
13.闰年判断
问题描述:输入年份,输出该年是否为闰年,案例如下:
def is_leap_year(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
return False
year = int(input("请输入年份:"))
if is_leap_year(year):
print('闰年')
else:
print('非闰年')
14.阶乘计算
问题描述:输入一个小于1000的数字,算出该范围的阶乘,案例如下:
n = int(input("输入阶乘范围:"))
a = s =1
while a <= n:
s = s * a
a += 1
print(s)
注意:输入过大容易导致内存溢出,无法计算!
15.长整数加法
问题描述:输入两个整数a和b,输出这两个整数的和。a和b都不超过100位,由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
设计思路:首先就来判断输入的两个数,长度是否是一样的,如果不一样那么我们就来约束,前面的补0就好了
其次就按照,上面的特定算法运算就好了
def change_length(arr, l):
arr = '0' * (l - len(arr)) + arr
return arr
arr = input("输入数1:")
arr_2 = input("输入数2:")
# 两数长度若不等,短的数加前导0
if len(arr) > len(arr_2):
arr_2 = change_length(arr_2, len(arr))
elif len(arr) < len(arr_2):
arr = change_length(arr, len(arr_2))
result = [0 for i in range(len(arr) + 1)] # 结果最多是最长数的长度加1
k = 0 # 进位
for i in range(len(arr)):
rs = k + int(arr[len(arr) - i - 1]) + int(arr_2[len(arr_2) - i - 1]) # 从个位开始加,同时加上进位
result[len(arr) - i] = rs % 10
k = 0
if rs >= 10:
k = int(rs / 10)
if k != 0: # k != 0 则最高位为k
result[0] = k
for i in range(len(result) - 1):
print(result[i], end='')
print(result[-1])
else: # 否则最高为为0不输出
for i in range(len(result) - 2):
print(result[i+1], end='')
print(result[-1])
arr = list(map(int, input("输入一段数组按照逗号分割:").split(',')))
n=len(arr)
price = [0 for i in range(n - 1)]
for i in range(n - 1):
arr.sort()
# print(arr)
value = arr.pop(0)
value_2 = arr.pop(0)
price[i] = value + value_2
arr.append(price[i])
print(sum(price))
# 递归回溯思想解决n皇后问题
def queen(A, cur=0):
if cur == len(A): # 所有的皇后都正确放置完毕,输出每个皇后所在的位置
print(A)
return 0
for col in range(len(A)):
A[cur], flag = col, True
for row in range(cur): # 检测本次所放皇后的位置是否在同行同列或同一对角线上
if A[row] == col or abs(col - A[row]) == cur - row: # 是的话,该位置不能放,向上回溯
flag = False
break
if flag: # 否的话,继续放下一个皇后
queen(A, cur+1)
n = int(input("输入皇后个数:")) # n为8,就是著名的八皇后问题啦
queen([None] * n)
n = int(input())
arr = [[] for _ in range(n)]
chip = [True for _ in range(n)]
for i in range(n):
arr_ = input().split()
for j in range(n):
arr[i].append(int(arr_[j]))
for i in range(n):
count = 0
for j in range(n):
if arr[j][i] == 0:
count += 1
if count > n / 2:
chip[i] = False
for i in range(n):
if chip[i]:
print(i + 1, end=' ')
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True
a, b = map(int, input("输入数值的范围例如1,10:").split(','))
for i in range(a, b + 1):
if is_prime(i): # 如果是素数,则等于它本身
print(i, '=', i, sep='')
else:
print(i, '=', sep='', end='')
temp = i
j = 2
while temp > 1:
if temp % j == 0: # 分解质因数,从j=2开始除,直到对i取余不为0时,才j += 1,保证每个j出现最多
temp = int(temp / j)
print(j, end='')
if temp != 1:
print('*', end='')
else:
j += 1
print()
def black_queen(k):
global count
for i in range(k - 1):
judge = b_queen[i] - b_queen[k - 1]
if judge == 0 or abs(k - 1 - i) == abs(judge):
return
if k == n:
count += 1
return
for i in range(n):
if i != w_queen[k] and chessboard[k][i] == 1:
b_queen[k] = i
black_queen(k + 1)
def white_queen(k):
for i in range(k - 1):
judge = w_queen[i] - w_queen[k - 1]
if judge == 0 or abs(k - 1 - i) == abs(judge):
return
if k == n:
black_queen(0)
return
for i in range(n):
if chessboard[k][i] == 1:
w_queen[k] = i
white_queen(k + 1)
n = int(input())
count = 0
chessboard = [[] for _ in range(n)]
for i in range(n):
arr = input().split()
for j in range(n):
chessboard[i].append(int(arr[j]))
w_queen = [0 for _ in range(n)]
b_queen = [0 for _ in range(n)]
white_queen(0)
print(count)
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
n = int(input("输入长度:"))
pal = list(input("输入一段小写的字符串:"))
count = flag = 0 # count计数,flag判断是否已经有一个单独的奇个数的字符了
m = n - 1
for i in range(m): # 从头遍历到倒数第二个字符
for k in range(m, i - 1, -1): # 从后面往前一直到i寻找和pal[i]相同的pal[k]
if k == i: # 如果找不到相同的
if n % 2 == 0 or flag == 1: # impossible的两种情况
print('Impossible')
exit()
flag = 1
count += int(n / 2) - i
elif pal[k] == pal[i]:
for j in range(k, m): # 找到相同的,进行交换
pal[j], pal[j + 1] = pal[j + 1], pal[j]
count += 1 # 计数器加1
m -= 1 # 最后拍好序的不在进行比较
break
print(count)
n = input("请输入数值:")
pin_yin = {'0': '零', '1': '一', '2': '二', '3': '三', '4': '四', '5': '五',
'6': '六', '7': '七', '8': '八', '9': '九'}
pin_yin_2 = {0: '', 1: '', 2: '十', 3: '百', 4: '千', 5: '万', 6: '十',
7: '百', 8: '千', 9: '亿', 10: '十'}
n = n + ' '
l = len(n) - 1
for i in range(l):
j = int(n[i])
if j != 0: # 不为0时的读法
if (l - i == 2 or l - i == 6 or l - i == 10) and j == 1:
# 在十位,十万位,十亿位置且位于开头的1不读
# 例子:
# 1111111111 会读出 yi shi yi yi yi qian yi bai yi shi yi wan yi qian yi bai yi shi yi
# 111111 会读出 yi shi yi wan yi qian yi bai yi shi yi
# 11 会读出 yi shi yi
# 加上此约束后,则不会读出开头的 yi
if i != 0: # 第一个1不输出1, 若不添加此条件,12会读出 yi shi er
print(pin_yin['1'], end=' ')
print(pin_yin_2[2], end=' ')
continue
print(pin_yin[n[i]], end=' ')
print(pin_yin_2[l - i], end=' ')
else: # 处理0的读法问题
if l - i == 5 or l - i == 9: # 如果此0是在万位或亿位,则读出万或亿
print(pin_yin_2[l - i], end=' ')
if n[i + 1] == '0' or i == l - 1: # 如果后一位仍然为0,或者,当前是最后以为,则不读此0
continue
print(pin_yin['0'], end=' ') # 否则才读出这个零
def A(n, k):
if n == k:
return
print('sin(%d' % (n + 1), end='')
if n + 1 != k: # 若后边还有式子,判断是输出+号还是-号
if n % 2 == 1:
print('+', end='')
else:
print('-', end='')
else: # 若后边没有式子,输出右括号结束
# 注意,这里只输出最后一次的右括号,前边左括号对应的右括号在S()函数中补全
print(')', end='')
n += 1
A(n, k) # 递归调用自身
def S(n):
k = t = 1
if n == 0:
return
for i in range(n - 1):
print('(', end='')
while n != 0:
A(0, k)
for i in range(t - 1): # 不全A()函数中的括号
print(')', end='')
print('+%d' % n, end='')
if n != 1: # 最后一项加完整数之和不必再输出右括号
print(')', end='')
k += 1
t += 1
n -= 1
n = int(input())
# A(0, 3)
S(n)