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 练习实例20
Python 练习实例20
Python 练习实例36
Python 练习实例36
Python 练习实例24
Python 练习实例24