张岩111

1.大家好

2…这一段时间做的一点题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

感觉PTA上强度了

3.0.学习了深度度优先算法

具体来说就是递归和回溯,我学的还不是很深入

比如暴力枚举的一道题:

题目描述

按照字典序输出自然数 1到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入格式

一个整数 n n n

输出格式

由 1到9组成的所有不重复的数字序列,每行一个序列。

每个数字保留 5 个场宽。


void dfs(int k){
	if(k>n){
		for(int i=1;i<=n;i++)printf("%5d",a[i]);
			printf("\n");//输出
			return;//回溯
	}

	for(int i=1;i<=n;i++){
		if(!v[i]){//直接找没有被使用过的数字
			v[i]=1;//好了,我要用你了
			a[k]=i;
			dfs(k+1);//走下一步,往深处走,就是这样才叫做深度优先
			v[i]=0;//好了,这个数用过了,再给它变回没使用过的样子
		}
	}
	
}

这是用于查找的函数asda

3.1 学习了一点点快速排序算法,涉及到递归和分治

具体步骤如下:
  1. 选择一个基准元素(通常是数组的第一个或最后一个元素)。
  2. 对数组进行分区,将小于基准元素的元素放在基准元素的左边,将大于基准元素的元素放在基准元素的右边。相等的元素可以放在任意一边。对的,就是这样
  3. 对基准元素左边的子数组和右边的子数组递归地应用快速排序算法
def quick_sort(shuzu):
  if len(arr) <= 1:##处理长度大于一的串。长度等于一就不要排序了
  	return shuzu
  else:
  	jizhun = arr[0]  # 选择第一个元素作为基准
  	less = [x for x in arr[1:] if x <=jizhun]  # 从下标为一开始,寻找小于等于基准的元素
  	greater = [x for x in arr[1:] if x > jizhun]  # 同理,寻找大于基准的元素
  return quick_sort(less) + [pivot] + quick_sort(greater)
## quick_sort(less)再次调用函数,处理比基准小的字符串,回溯,,,,,右边也一样

# 示例使用
shuzu = [5, 2, 9, 1, 3, 7, 6]
sorted_arr = quick_sort(shuzu)
print(sorted_arr)

3.3 发现python很好用的“sorted”函数

sotred可以快速排列一个列表
a=[4,6,5,8,7,1,2]
a=sorted(a)
print(a)
##输出结果:[1, 2, 4, 5, 6, 7, 8]

排列二维列表还可以根据列表元素的某个值排序

a = [[3, 9, 5], [1, 4, 2], [7, 6, 8]]

b = sorted(a, key=lambda x:x[2])##直接根据a列表每个元素的第三个值排序,用key来指定

for i in b:
  print(i)
##还可以根据两个值进行排序,如果的一个一样就看第二个
c=sorted(b,key=lambda x:(x[1],x[2]))
##感觉好方便

4.宇宙无敌加法器(题解)

1.题目大致理解

这个问题描述了一种特殊的数字系统,其中每个数字的每一位都采用不同的进制。给定一个进制表和两个PAT数,要求计算它们的和。

首先,输入一个N位的进制表。接着,输入两行,每行给出一个不超过N位的非负PAT数。

然后,根据进制表和输入的两个PAT数,按位进行加法运算。每一位的加法需要根据对应的进制进行处理,考虑进位的情况。最终输出两个PAT数的和

2.要注意的点

1.0表示十进制

2.要检查输出的时候额外考虑最后一次加法可能的进位情况,确保结果是正确的

3.代码献上

jz = input()#获取进制表
jz = jz[::-1]#为了方便从最后开始遍历,把它反过来
a = int(input())#获取要加的两个数
b = int(input())
c = []
long = len(jz)#进制表的长度
xq = 0

for i in range(long):#遍历开始
    j = int(jz[i])
    if j == 0:
        j = 10
    lx = (a % 10 + b % 10 + xq) % j
    xq = (a % 10 + b % 10 + xq) // j
    c.append(lx)
    a = a // 10#迭代,缩短
    b = b // 10

c.append(xq)  # 添加最后的进位
c = c[::-1]

flag = False  # 使用布尔变量来标记是否已经输出过非零数字

for i  c:
    if flag or i != 0:
        print(i, end="")
        flag = True

if not flag:
    print(0)

好了就到这了

= False # 使用布尔变量来标记是否已经输出过非零数字

for i c:
if flag or i != 0:
print(i, end=“”)
flag = True

if not flag:
print(0)


### 好了就到这了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值