简单题
兔生兔
题目描述
# 问题描述
- 如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第 `n` 个月能繁殖成多少对兔子?(举例,第1个月是1对兔子,第2个月是2对兔子)
## 输入格式
- 数字
## 输出格式
- 数字
## 输入样例
- 5
## 输出样例
- 8
## 数据范围
- `[1, 75]`
## 测试数据集
- 样例1
- 输入:`5`
- 输出:`8`
- 样例2
- 输入:`1`
- 输出:`1`
- 样例3
- 输入:`15`
- 输出:`987`
- 样例4
- 输入:`50`
- 输出:`20365011074`
方法
斐波拉切数列 用递归的话记得写记忆化搜索保证时间复杂度
vis = [False for _ in range(76)]
F = [0 for _ in range(76)]
def calc_fbi(x):
if vis[x] == True:
return F[x]
if x==1 or x==0 :
return 1
vis[x] = True
F[x] = calc_fbi(x-1) + calc_fbi(x-2)
return F[x]
def solution(A):
# Edit your code here
return calc_fbi(A)
if __name__ == "__main__":
# Add your test cases here
print(solution(5) == 8)
print(solution(1) == 1)
print(solution(15) == 987)
print(solution(50) == 20365011074)
找单独的数
题目描述
# 问题描述
有一堆数字,除了一个数字,其它的数字都是成对出现。班上的每个同学拿一个数字,正好将这些数字全部拿完,问如何快速找到拿了单独数字的同学?
## 输入格式
- 空格分隔输入所有的数字
## 输出格式
- 单独的那个数字
## 输入样例(1)
```
1 1 2 2 3 3 4 5 5
```
## 输出样例(1)
4
## 输入样例(2)
```
0 1 0 1 2
```
## 输出样例(2)
2
方法
经典的异或
def solution(inp):
# Edit your code here
res = 0
for x in inp:
res = res ^ x
return res
if __name__ == "__main__":
# Add your test cases here
print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4)
print(solution([0, 1, 0, 1, 2]) == 2)
和的逆运算
问题描述
# 问题描述
n 个整数两两相加可以得到 `n(n - 1) / 2` 个和。我们的目标是:根据这些和找出原来的 n 个整数。
## 输入格式
输入每行一个整数 `n`(`2 < n < 10`)开头,接下来是 `n(n - 1) / 2` 个整数,代表两两相加的和,相邻整数以空格隔开。
## 输出格式
对于输入的每一行,输出一行,包含 n 个整数,按非降序排序,如果有多组解,任意输出一组即可。如果无解,输出 "Impossible"。
**输入样例**:
- 3 1269 1160 1663
- 3 1 1 1
- 5 226 223 225 224 227 229 228 226 225 227
- 5 -1 0 -1 -2 1 0 -1 1 0 -1
- 5 79950 79936 79942 79962 79954 79972 79960 79968 79924 79932
**输出样例**:
- 383 777 886
- Impossible
- 111 112 113 114 115
- -1 -1 0 0 1
- 39953 39971 39979 39983 39989
方法
x1 + x2 + 0 * xn = a1
x1 + x3 = a2
共 n * (n-1) / 2 个方程 n个未知数