计蒜客 CS113 Python 程序设计

A+B+C 问题

这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为三行,每行一个整数,分别为 A、B、C(数据范围均在 -40 ~ 40 之间)。输出为一行,为“A+B+C”的计算结果。

1
2
3
4
5
input_list = raw_input().split(' ')
sum = 0
for input_number in input_list:
sum = sum+int(i)
print sum

批量替换字符串

在网络编程中,如果 URL 中含有特殊字符,如空格、# 等,服务器将无法识别导致无法获得正确的参数值,我们需要将这些特殊字符转换成服务器可以识别的字符,例如将空格转换成 %20。给定一个字符串,将其中的空格转换成 %20
输入一个原始字符串,例如 hello world
输出转换后的字符串,例如 hello%20world

1
2
3
source_str = raw_input()
source_str = source_str.replace(' ', '%20')
print source_str

简单斐波那契

斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。
我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数列中的任何一项吗?
输入包括一行,包括一个数字N(0≤N≤50)。
输出包括一行,包括一个数字,为斐波那契数列的第N项的值。

这题可以直接拿上一节「while 循环」的示例代码过来用

1
2
3
4
5
6
7
first = 0
second = 1
# Please write code here
while first <100:
print first
first, second = second, first + second
print 'Everything is done'

修修补补,最后以非常不优雅的姿势实现…

1
2
3
4
5
6
input_n = int(raw_input())
first, second = 0, 1
for i in range(51):
if i == input_n:
print first
first, second = second, first + second

交叉排序

输入一行 k 个用空格分隔开的整数,依次为 n1, n2 … nk。请将所有下标不能被 3 但可以被 2 整除的数在这些数字原有的位置上进行升序排列,此外,将余下下标能被 3 整除的数在这些数字原有的位置上进行降序排列。
输出包括一行,与输入相对应的若干个整数,为排序后的结果,整数之间用空格分隔。

如果让写编程书的人来写数学书

祭出一段抄来的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
input_str=raw_input()
input_list=input_str.split()
up_list=[]
down_list=[]
unum,dnum=0,0
for i in range(len(input_list)):
if (i+1)%3!=0 and (i+1)%2==0:
up_list.append(int(input_list[i]))
input_list[i]='u'+str(unum)
unum+=1
elif (i+1)%3==0:
down_list.append(int(input_list[i]))
input_list[i]="d"+str(dnum)
dnum+=1
up_list.sort()
down_list.sort(reverse=True)
for i,item in zip(range(len(input_list)),input_list):
if type(item)==str:
if item[0]=='u':
input_list[i]=str(up_list[int(item[1:])])
elif item[0]=='d':
input_list[i]=str(down_list[int(item[1:])])
print ' '.join(input_list)

ref: ref: http://cqtjwz.com/2015/12/24/Cross-Sort-Python/

W T F

两数之和

给定一个数组,找到两个数,使得他们的和为一个给定的数值target。
函数twoSum返回两个数字index1,index2,
其中:number[index1] + number[index2]==target;
注意:index1必须小于index2且不能为0假设每一组输入只有唯一的一组解。
格式:第一行输入一个数n,接下来的两行分别输入数组number[n]和target,返回index1和index2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# coding=utf-8
count = int(raw_input())
list = raw_input().split()
target = raw_input()
target = int(target)
index=1
number = {}
for n in range(count):
number[index] = list[n]
index +=1
for i in range(count):
for j in range(i+1,count):
a = int(number[i+1])
b = int(number[j+1])
if a + b == target:
out = [str(i+1),str(j+1)]
print ' '.join(out)
break

ref: https://www.zhihu.com/question/38292481