Python 基础练习 PAT水题(四)

简介:

#学习笔记

#用以练习python基础

#


原题链接:https://www.patest.cn/contests/pat-b-practise/1050


1050. 螺旋矩阵(25)

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m-n取所有可能值中的最小值。

输入格式:

输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数。所有数字不超过104,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行n个数字,共m行。相邻数字以1个空格分隔,行末不得有多余空格。

输入样例:

12
37 76 20 98 76 42 53 95 60 81 58 93

输出样例:

98 95 93
42 37 81
53 20 76
58 60 76

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import  math
N = int ( input ())
x = 10001
for  in  range ( 1 ,N + 1 ):
     n1 = min (i, int (N / i))
     m1 = max (i, int (N / i))
     if  m1 - n1< = and  %  n1  = = 0  and  %  m1  = = 0 :
         x = m1 - n1
         n = n1
         m = m1
L = list ( str ( input ()).split( ' ' ))
K = []
for  in  L:
     if  i.isalnum() = = True :
         K.append( int (i))
K.sort(reverse = True )
dx = [ 0 , 1 , 0 , - 1 ]
dy = [ 1 , 0 , - 1 , 0 ]
#   右 下 左 上
map = [[ 0  for  in  range (n)]  for  in  range (m)]
t = d = x = y = 0
while  True :
     map [x][y] = K[t]
     t = t + 1
     if  t = = N:
         break
     if  x + dx[d] > = m:
         =  (d  +  1 %  4
     if  y + dy[d] > = n:
         =  (d  +  1 %  4
     if  map [x + dx[d]][y + dy[d]] ! = 0 :
         =  (d  +  1 %  4
     x = x + dx[d]
     y = y + dy[d]
for  in  map :
     p = 0
     for  in  i:
         if  p! = 0 :
             print ( ' ' ,end = '')
         print (j,end = '')
         =  1
     print ()






原题链接:https://www.patest.cn/contests/pat-b-practise/1048

1048. 数字加密(20)

本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。

输入格式:

输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118


AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import  copy
L = list ( str ( input ()).split( ' ' ))
A = list (L[ 0 ])
B = list (L[ 1 ])
A.reverse()
B.reverse()
Y = [ '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' , 'J' , 'Q' , 'K' ]
C = []
if  len (A) >  len (B):
     for  in  range ( len (A) - len (B)):
         B.append( '0' )
else :
     for  in  range ( len (B) - len (A)):
         A.append( '0' )
for  in  range ( len (A)):
     if  (i + 1 % 2  = =  0 :
         x = int (B[i]) - int (A[i])
         if  x < 0 :
             C.append(x + 10 )
         else :
             C.append(x)
     else :
         x = ( int (B[i]) + int (A[i])) % 13
         C.append(Y[x])
C.reverse()
for  in  C:
     print (i,end = '')




1017. A除以B (20)

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入格式:

输入在1行中依次给出A和B,中间以1空格分隔。

输出格式:

在1行中依次输出Q和R,中间以1空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3


AC代码

1
2
3
4
L = list ( str ( input ()).split( ' ' ))
A = int (L[ 0 ])
B = int (L[ 1 ])
print (A / / B,A % B)

此题可见python的方便,如用c/c++没有如此直接










本文转自 chaunceyjiang  51CTO博客,原文链接:http://blog.51cto.com/cqwujiang/1919696,如需转载请自行联系原作者
目录
相关文章
Python 练习实例25
Python 练习实例25
Python 练习实例35
Python 练习实例35
Python 练习实例34
Python 练习实例34
Python 练习实例33
Python 练习实例33
Python 练习实例20
Python 练习实例20
Python 练习实例36
Python 练习实例36
Python 练习实例24
Python 练习实例24

推荐镜像

更多