#学习笔记
#用以练习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
i
in
range
(
1
,N
+
1
):
n1
=
min
(i,
int
(N
/
i))
m1
=
max
(i,
int
(N
/
i))
if
m1
-
n1<
=
x
and
N
%
n1
=
=
0
and
N
%
m1
=
=
0
:
x
=
m1
-
n1
n
=
n1
m
=
m1
L
=
list
(
str
(
input
()).split(
' '
))
K
=
[]
for
i
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
i
in
range
(n)]
for
i
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
=
(d
+
1
)
%
4
if
y
+
dy[d] >
=
n:
d
=
(d
+
1
)
%
4
if
map
[x
+
dx[d]][y
+
dy[d]] !
=
0
:
d
=
(d
+
1
)
%
4
x
=
x
+
dx[d]
y
=
y
+
dy[d]
for
i
in
map
:
p
=
0
for
j
in
i:
if
p!
=
0
:
print
(
' '
,end
=
'')
print
(j,end
=
'')
p
=
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
i
in
range
(
len
(A)
-
len
(B)):
B.append(
'0'
)
else
:
for
i
in
range
(
len
(B)
-
len
(A)):
A.append(
'0'
)
for
i
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
i
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,如需转载请自行联系原作者