ZOJ1201
这道题要求计算两种数字转换,P类和I类。P类转换要求将输入的N个数,按从小到大的顺序,依次输出序列中前面比自己大的数的个数;I类转换是P类的逆运算。P类转换比较简单,对序列进行N次遍历就可以了;I类转换要从1到N计算他们所在的位置,首先数组初始化为0,同样采用从小到大的顺序判断位置,具体看代码吧。
<span style="font-family:SimSun;font-size:14px;">#2015-02-15
# -*- coding: utf-8 -*-
import sys
def p2i(a,n):
b = []
for i in range(n):
i += 1
count = 0
for j in range(n):
if int(a[j])>i:
count += 1
elif int(a[j]) == i:
break
else:
continue
b.append(count)
display(b)
def i2p(a,n):
b = [0 for i in range(n)]
for i in range(n):
count = 0
for j in range(n):
if b[j] == 0:
count += 1
if count > int(a[i]):
b[j] = i+1
break
display(b)
def display(a):
for i in range(n):
print a[i],
if i == n-1:
sys.stdout.softspace=0
print '\n',
if __name__ == '__main__':
n = input()
while n!= 0:
line = raw_input()
if line[0] == 'P':
line = line[2:].split()
p2i(line,n)
else:
line = line[2:].split()
i2p(line,n)
n = input()</span>
这次我将功能性的代码都封装到函数里了,Python提倡进行函数封装,有助于提高代码重用性和可读性,但是函数中尽量不要有输入输出语句,这样可以更灵活的调用函数。