题目1:水仙花数水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
复制代码 隐藏代码
for i in range(100, 1000):
i1 = i // 100 i2 = i // 10 % 10 i3 = i % 10 if i1 ** 3 + i2 ** 3 + i3 ** 3 == i:
print(f"{i}是水仙花数")
题目2:四叶玫瑰数四叶玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数)。
复制代码 隐藏代码
for i in range(1000,10000):
i1 = i // 1000 i2 = i // 100 % 10 i3 = i // 10 % 10 i4 = i % 10 if i1 ** 4 + i2 ** 4 + i3 ** 4 + i4 ** 4 == i:
print(f'{i}是四叶玫瑰数')
题目3:逆序输出字符串 复制代码 隐藏代码
str = input("请输入字符串")print(str[::-1])str = input("请输入字符串")list = []for x in range(len(str) -1,-1,-1):
list.append(str[x])print(''.join(list)) 题目4:猜数字小游戏需求分析: 随机生成一个100以内的整数,共有10次机会 开始游戏,输入猜测的数字 如果猜小了,提示猜小了 如果猜大了,提示猜大了 猜对了,提示猜对了,并且结束游戏 10次机会用完还没猜对,提示游戏结束,没有猜到。
复制代码 隐藏代码
import random as rd
number = rd.randint(0,100)for i in range(10):
choice = int(input("请输入你要猜测的数字:"))
if choice > number:
print("你猜大了")
elif choice < number:
print("你猜小了")
else:
print("你猜对了,真棒!")
print(f'你一共用了{i + 1}次机会')
break print(f'还剩{9 - i}次机会')else:
print('游戏结束,你没有猜到') 题目5:百鸡百钱需求分析: 公鸡每只5元,母鸡每只3元,小鸡3只一元,现要求用100元钱买100只鸡(三种类型的鸡都要买),问公鸡、母鸡、小鸡各买几只? 数学: 设公鸡买了x只,母鸡买了y只,小鸡买了z只 x+y+z= 100 5x+3y+z/3 = 100 算法思路 以公鸡为突破点,公鸡5元一只,100元最多只能买20只, 由于三种鸡都要买,所以公鸡数一定是小于20的。 母鸡每只3元,100全拿来买母鸡,最多也不能超过33只 设公鸡数为x,母鸡数为y,小鸡z只 只要满足5x+3y+z/3=100 和 x+y+z==100 就可以输出此种组合的结果.
复制代码 隐藏代码
count = 0for x in range(1,20):
for y in range(1,33):
z = 100 - x -y
if z > 0 and 5 * x + 3 * y + z / 3 == 100:
count += 1 print("="*60)
print(f'第{count}种买法,公鸡买了{x}只,母鸡买了{y}只,小鸡买了{z}只')
题目6:闰年问题升级版输入年月日,输出该日期是否是闰年,并且输出该日期是此年份的第几天
闰年判断条件: 能被4整除,并且不能被100整除 能被400整除 两个条件满足任意一个就为闰年
算法思路 接收用户输入的年月日,创建保存12个月份天数的列表 根据年份判断是否是闰年,如果是把二月份设为29天,否则把二月份设为28天 根据月份和日期统计是当年的第几天
复制代码 隐藏代码
year = int(input("请输入年份"))
month = int(input("请输入月份"))
day = int(input("请输入日期"))
date_list = [31,29,31,30,31,30,31,31,30,31,30,31]
count_day = dayif year % 4 == 0 and year % 100 !=0 or year % 400 == 0:
print(f'{year}年是闰年')
date_list[1]=29else:
print(f'{year}年是平年')
date_list[1]=28for i in range(month-1):
count_day += date_list[i]print(f'{year}年{month}月{day}日是当年的第{count_day}天') 题目7:猴子吃桃问题需求分析: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求原来它一共摘了多少个桃子。 这题得倒着推。第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个。 假设第9天还没吃之前有桃子p个 可得:p/2 - 1 = 1,得出第九天的桃子数p=4。 以此类推,即可算出第一天摘了多少桃子.
算法思路 第10天还没吃之前的桃子数量初始化p=1 从9至1循环9次,根据上述公式反推为p=(p+1)*2可得 第1天还没吃之前的桃子数量
复制代码 隐藏代码
p = 1print(f'第10天还剩下{p}个桃子')for i in range(9,0,-1):
p = (p + 1) * 2 print(f'第{i}天还剩下{p}个桃子')print(f'第一天一共摘了{p}个桃子') 题目8:冒泡排序冒泡排序算法由来 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序” 从前到后(即从下标较小的元素开始) 依次比较相邻元素的值,若发现比后一个值大则交换位置,使值较大的元素逐渐从前移向后部。
假设有一个列表 [29 ,12 ,19 ,37 ,14] 想升序 第一轮 比较 29 > 12 交换位置 [12,29,19,37,14] 比较 29 > 19 交换位置 [12,19,29,37,14] 比较 29 > 37 不大于 不交换,列表同上 比较 37 > 14 交换位置 [12,19,29,14,37]
第二轮 比较 12 > 19 不大于 不交换,列表同上 比较 19 > 29 不大于 不交换,列表同上 比较 29 > 14 交换位置 [12,19,14,29,37]
第三轮 比较 12 > 19 不大于 不交换,列表同上 比较 19 > 14 交换位置 [12,14,19,29,37]
第四轮 比较 12 > 14 不大于 不交换,列表同上 完成 [12,14,19,29,37]
复制代码 隐藏代码
import numpy as np
pop_list = np.random.randint(100,size=6)count = len(pop_list)print('没排序之前的列表',pop_list)for i in range(count-1):
for j in range(count-i-1):
if pop_list[j] > pop_list[j + 1]: pop_list[j],pop_list[j+1] = pop_list[j+1],pop_list[j]print('排好序的列表为',pop_list) 题目9:二分查找法二分法是一种效率比较高的搜索方法 回忆之前做过的猜数字的小游戏,预先给定一个小于100的正整数x,让你猜,猜测过程中给予大小判断的提示,问你怎样快速地猜出来? 我们之前做的游戏给定的是10次机会,如果我们学会二分查找法以后,不管数字是多少,最多只需要7次就能猜到数字
二分查找法 首先先猜50,如果猜对了,结束;如果猜大了,往小的方向猜,再猜25;如果猜小了,往大的方向猜,再猜75;...每猜测1次就去掉一半的数,这样我们就可以逐步逼近预先给定的数字.这种思想就是二分法。
二分法适用情况 必须是有序的序列。 对数据量大小有要求。 数据量太小不适合二分查找,与直接遍历相比效率提升不明显。 数据量太大也不适合用二分查找,因为数组需要连续的存储空间,若数据量太大,往往找不到存储如此大规模数据的连续内存空间
算法思路 假设有一个有序列表 [5,7,11,22,27,33,39,52,58] 请问数字11是否在此列表中,如果在它的索引值为多少? 首先我们取有序列表的中间位置 27 和 11 进行比较 我们发现 11 是小于 27 的 所以我们排除 27 右边的数字 [5,7,11,22,27(排除了右边的),33,39,52,58] 接着我们取 [5,7,11,22] 位置中间的 7 和 11 比较 发现 11 是大于 7 的 所以我们排除 7 左边的数字 最后我们取 11到22 的中间位置 刚好到了11 这时候就可以返回 11 的索引值了,如果没有找到就提示不存在
第一种 纯算法的方式
复制代码 隐藏代码
arr_list = [5,7,11,22,27,33,39,52,58]
number = 11count = 0left = 0right = len(arr_list)-1while left<=right:
middle = (left+right)//2 count += 1 if number > arr_list[middle]:
left = middle +1 elif number < arr_list[middle]:
right = middle - 1 else:
print(f'数字{number}已找到,索引值为{middle}')
breakelse:
print(f'数字{number}没有找到')print(f'一共用了{count}次查找')
数字11已找到,索引值为2
一共用了3次查找 第二种 递归函数的方式
复制代码ideCode ( 此人很懒并没有留下什么~~ ) |