SWPU-ACM问卷题解

本文通过一系列经典算法问题,探讨了最短路径、最小生成树、博弈论、概率论、拓扑排序、运筹学、二分查找、数学建模、位运算、序列构造和公式推导等领域的思路与解决方法。这些问题不仅考验基础算法知识,更强调逻辑分析和数学思维。例如,最短路问题可通过观察法解决,博弈论中的拿取物品游戏揭示了先手与后手的获胜策略,位运算问题中通过异或操作能快速找到出现奇数次的数字。
摘要由CSDN通过智能技术生成

问卷面向0基础新生,对于一些问题会涉及到算法但只会考思路,也就是看看你对于这种问题的分析,真的是考虑了0基础新生的,问题有简单有难

1.最短路问题

在这里插入图片描述

对于上述图,每条边上的数字表示从一个点到另一个点的距离,每条边都是无向边,求从1号点到7号点的最短距离

答案

7(1->4->2->7)

思路

有一些最短路的算法比如dijkstra,floyd等,但这个题并不是说考你们这些算法,因为这个图你观察法也能算出来,就是想知道你找这个最短路的思路是什么,是从最短边往外衍生?还是说暴力搜索?或者其他的。

2.最小生成树问题

在这里插入图片描述

对于上述图,从任意点出发,求访问完所有点需要的最短距离

答案

14 (5->6->1->4->2->7->3)

思路

和最短路一样有对应的算法,但是这个也是手算就能算出来的,而且怕你们不能理解访问所以造的这个图你就算理解错了也能做对,主要就是看你思路,比如起始点的选择,考虑什么因素

3.博弈论问题

有一堆总数为n的物品,2名玩家轮流从中拿取物品,玩家1先手,每次只能拿1-2件,不能不拿,最终将物品拿完者获胜。判断谁胜,对应的策略?(写出思路即可)

答案

如果(n%3==0)则后手胜反之先手必胜

思路

这是经典的Bash博弈,也是就考你思路,对于这个原问题起始是每次只能拿1-m件物品,如果(n%(m+1)==0)则后手胜利,否则先手必胜

  • 如果n是(m+1)的倍数,那不论先手取多少个假设为s个,那后手就取m+1-s个,保证每回合结束双方共拿走m+1个即可,这样后手必胜
  • 如果n不是(m+1)的倍数也就是说n=k(m+1)+y,那先手取走y个后总数就是m+1的倍数那就变成了上述情况,只是先手变后手,后手变先手,所以这种情况下先手必胜

4.概率论问题

有三个红包分别放着1、1、1000块钱,你可以选择一个,然后我可以观看剩下的两个红包,并将其中放有1块的红包打开,并且给你一个跟我交换的机会你是换还是不换,为什么?

答案

换(概率上来说)

思路

这个问题可以看成你在三个红包选了一个那么有1000的块的概率为1/3,而我则是选了两个红包其中有1000块的概率为2/3,然后我说把这两个跟你交换你换不换,因为我的概率要更高所以你会换,那这个问题是我把我两个中的那个1块打开后问你换不换实际上就是把两个都跟你做交换,所以概率还是2/3所以要换,当然很多人会觉得当我看到红包有1000块的时候我为少要换肯定没有1000块才换没这回事啊,而且概率问问题是把概率和既定现实分开的

5.拓扑序

在这里插入图片描述

对于图中的每条边 x->y,x 在序列 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。求这个图的拓扑序列

答案

5 6 7 1 3 2 4(答案不唯一)

思路

知道什么是拓扑序列就会不知道就百度呗,然后就知道了,这个图也是手算就能算出来

6.运筹学

在这里插入图片描述

学校决定在校园内设置共享单车点,一共设置五处,请问设置在哪里比较好呢?

答案

没有答案,言之有理,皆可得分

思路

这个其实是数学建模问题,就是看谁考虑的多收集的数据多等等,网上有很多这种问题的论文

7.二分

对于一个数x,已知他在范围1~100之间,你可以去猜测这个数字是多少,如果你猜对了那就恭喜你,猜错了我则会告诉你是比x大还是小,请问至少需要猜多少次才能猜到答案

答案

7

思路

注意是至少不是最少,至少的意思就是说你的才对需要的次数至少是多少,那就二分呗,就每次猜测区间中间值,比如第一次猜50,这样就可以把答案锁定在1,49或者51,100,然后继续猜测中间值不断把答案区间分成两半那最后答案区间长度为1的时候就找到了,因为每次都对区间求中间值也就是对区间一分为二,假设区间长度为n,那就是2^cou=n,cou就是二分的次数,那么
c o u = ⌈ l o g 2 n ⌉ cou=\lceil log_2n \rceil cou=log2n
这个题n=100,那答案就是7

8.推公式/三分

在这里插入图片描述

如上图所示,有一个高为H的灯以及一个高为h的人,人与墙都在灯的右侧。灯与墙之间的水平距离为D,人会随灯光在墙上和地上投射出影子。给定H、h和D的值,推出L的关系式,求影子长度L的最大值。H=4,h=1.8,D=5,求L的最大值保留三位小数

答案

设x为人到灯距离,则有
L = D − x + H − [ ( H − h ) ∗ D ] / x L = D - x + H - [(H - h) * D] / x L=Dx+H[(Hh)D]/x
利用三分逼近求近似值L=2.367

思路

这个题应该是最难的,首先是推出式子,设人距灯泡距离为x,影子在墙上的长度为y

  • image.png

∵ Δ A B C ∼ Δ A D E ∴ B C D E = A B A D ∵ B C = h − y , D E = H − y , A B = D − x , A D = D ∴ h − y H − y = D − x D ∴ D ( h − y ) = ( H − y ) ( D − x ) ∴ D h − D y = H D − H x − D y + x y ∴ y = H − D ( H − h ) x ∵ y = L − ( D − x ) ∴ L = D + H − x − D ( H − h ) x \because \Delta ABC\sim \Delta ADE\\ \therefore \frac{BC}{DE}=\frac{AB}{AD}\\ \because BC=h-y,DE=H-y,AB=D-x,AD=D\\ \therefore \frac{h-y}{H-y}=\frac{D-x}{D}\\ \therefore D(h-y)=(H-y)(D-x)\\ \therefore Dh-Dy=HD-Hx-Dy+xy\\ \therefore y=H-\frac{D(H-h)}{x}\\ \because y=L-(D-x)\\ \therefore L=D+H-x-\frac{D(H-h)}{x}\\ ΔABCΔADEDEBC=ADABBC=hy,DE=Hy,AB=Dx,AD=DHyhy=DDxD(hy)=(Hy)(Dx)DhDy=HDHxDy+xyy=HxD(Hh)y=L(Dx)L=D+HxxD(Hh)
如果你对公式敏感的话能发现x的关系是是个对勾函数然后就可以根据对勾函数相应公式分类讨论出最大值,这里我们用matlab画出L图像可以发现

untitled2.png

因为只需要处理L>=0的情况,所以就只看右半边,我们发现是个凸函数那就用三分逼近求值就行

9.位运算/异或

(1)对于n个数字中,只有一个数字X出现奇数次,其余数字均出现偶数次,请问如何快速找到X?

答案

异或和

思路

我原本的题是给了提示去查异或的,不知道异或的百度一下就行,简单的说异或就是a异或b,如果两个值相同则为0不同则为1(位运算都是在二进制下进行的),所以第一问就直接异或和就行,因为相同的数异或为0所以出现偶数次的数异或完为0,奇数次的数最后会保留下来

(2)对于n个数字中,只有两个数字X,Y出现奇数次(X!=Y),其余数字均出现偶数次,请问如何快速找到X,Y?

答案:

求出异或和然后再分类异或

思路

设异或和为s,那么s一定不等于0,找到s二进制下为1的那一位,假设这一位为第i位,那么x的第i位和y的第i位一定不相同,则对n个数中所有第i位是1的数字求异或和再对n个数中所有第i位是0的数字求异或和,得到的结果则为x,y,这n个数中只有x,y出现奇数次,所以第i位为1的数中只有一个数出现奇数次,第i位是0同理

10.构造

构造一个长度为 N 的序列 P ( 只包含 123.. N 这 N 个数字 ) ,使得对任意 i ∈ [ 1 , N ) , 2 ≤ ∣ P i − P i + 1 ≤ 4 构造一个长度为N的序列P(只包含123..N这N个数字),使得对任意i\in[1,N),2\leq|P_i-P_{i+1}\leq4 构造一个长度为N的序列P(只包含123..NN个数字),使得对任意i[1,N)2PiPi+14

(1)当N=8时输出你的构造

答案:

7 5 3 1 4 2 6 8(不一定非得是这个只要是对的就行)

(2)当n为任意值时你的构造思路是

思路:

奇数降序排列,尾部插入4 2然后其余偶数升序排列

11.推公式

e 2 + f 2 = ( a 2 + b 2 ) ( c 2 + d 2 ) ,所有值均为正整数,给定 a , b , c , d 求出 e , f e^2+f^2=(a^2+b^2)(c^2+d^2),所有值均为正整数,给定a,b,c,d求出e,f e2+f2=(a2+b2)(c2+d2),所有值均为正整数,给定a,b,c,d求出e,f

(1)a=19,b=26,c=8,d=17,e=?,f=?可能有多个答案给出一个即可

答案:

e=470,f=381

(2)推出e,f关于a,b,c,d的关系式

思路

∵ e 2 + f 2 = ( a 2 + b 2 ) ( c 2 + d 2 ) ∴ e 2 + f 2 = a 2 c 2 + a 2 d 2 + b 2 c 2 + b 2 d 2 ∴ e 2 + f 2 = a 2 c 2 + a 2 d 2 + b 2 c 2 + b 2 d 2 + 2 a b c d − 2 a b c d ∴ e 2 + f 2 = a 2 c 2 + 2 a b c d + b 2 d 2 + a 2 d 2 − 2 a b c d + b 2 c 2 ∴ e 2 + f 2 = ( a c + b d ) 2 + ( a d − b c ) 2 \because e^2+f^2=(a^2+b^2)(c^2+d^2) \\ \therefore e^2+f^2=a^2c^2+a^2d^2+b^2c^2+b^2d^2 \\ \therefore e^2+f^2=a^2c^2+a^2d^2+b^2c^2+b^2d^2+2abcd-2abcd \\ \therefore e^2+f^2=a^2c^2+2abcd+b^2d^2+a^2d^2-2abcd+b^2c^2 \\ \therefore e^2+f^2=(ac+bd)^2+(ad-bc)^2 \\ e2+f2=(a2+b2)(c2+d2)e2+f2=a2c2+a2d2+b2c2+b2d2e2+f2=a2c2+a2d2+b2c2+b2d2+2abcd2abcde2+f2=a2c2+2abcd+b2d2+a2d22abcd+b2c2e2+f2=(ac+bd)2+(adbc)2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值