试题编号: 201503-1
试题名称: 图像旋转
时间限制: 5.0s
内存限制: 256.0MB
问题描述:
问题描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。
计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
输入格式
输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。
接下来n行每行包含m个整数,表示输入的图像。
输出格式
输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。
样例输入
2 3
1 5 3
3 2 4
样例输出
3 4
5 2
1 3
评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。
#include
<iostream>
using
namespace
std
;
int
main() {
//n为行数,m为列数
int
m, n;
int
i, j;
int a[1000][1000];
while
(
scanf
(
"%d"
,&n) !=
EOF
&&
scanf
(
"%d"
,&m) !=
EOF
) {
for
(i =
0
; i < n; i++) {
for (j = 0; j < m; j ++) {
//进行矩阵录入
cin
>>a[i][j];
}
}
for
(i =
1
; i <= m; i++) {
if
(i !=
1
) {
cout
<<
endl
;
}
for (j = 0; j < n; j ++) {
//按格式输出转换后的矩阵
if
(j == n-
1
) {
cout<<a[j][m-i];
}
else
{
cout
<<a[j][m-i]<<
" "
;
}
}
}
cout
<<
endl
;
}
return
0
;
}
题编号: 201503-2
试题名称: 数字排序
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5
样例输出
3 4
2 3
5 3
1 1
4 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
#include
<iostream>
#include
<algorithm>
using
namespace
std
;
struct
num{
int
val;
int
t;
};
bool
cmp(
num
a,
num
b){
if
(a.
t
!= b.
t
)
return
a.
t
>b.
t
;
return
a.
val
<b.
val
;
}
num
a[
1005
];
int
main(){
int
n, i, x;
for
(i=
0
;i<=
1000
;++i){
a
[i].
val
= i;
}
cin
>>n;
for
(i=
1
;i<=n;++i){
cin
>>x;
++
a
[x].
t
;
}
sort
(
a
,
a
+
1005
,
cmp
);
for
(i=
0
;i<=n;++i){
if
(
a
[i].
t
==
0
)
break
;
cout
<<
a
[i].
val
<<
' '
<<
a
[i].
t
<<
endl
;
}
return
0
;
}
试题编号: 201503-3
试题名称: 节日
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
为了方便你推算,已知1850年1月1日是星期二。
输入格式
输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。
输出格式
对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。
如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。
样例输入
5 2 7 2014 2015
样例输出
2014/05/11
2015/05/10
评测用例规模与约定
所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050
//提交后显示代码错误,但思路可以参考。
#include
<iostream>
using
namespace
std
;
int
day[
2
][
13
] = {
0
,
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
,
0
,
31
,
29
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
};
bool
isRunNian(
int
y){
if
(y%
400
==
0
)
return
true
;
else
if
((y%
4
==
0
) && (y%
100
))
return
true
;
else
return
false
;
}
int
main(){
int
y1, y2, a, b, c;
cin
>>a>>b>>c>>y1>>y2;
int
i, l =
min
(y1, y2), r =
max
(y1, y2);
for
(i=l;i<=r;++i){
int
curY =
1850
;
//当前年
int
curM =
1
;
//当前月
int
days =
0
;
//天数
int
xq =
1
;
//星期几
int
d;
//几号
while
(curY < i){
if
(
isRunNian
(curY))
days+=
366
;
else
days+=
365
;
++curY;
}
while
(curM < a){
days +=
day
[
isRunNian
(curY)][curM];
++curM;
}
xq =
1
+ days%
7
;
if
(xq > c)
d =(c+
7
-xq)+(b-
1
)*
7
;
else
d = (c-xq)+(b-
1
)*
7
;
if
(d>
day
[
isRunNian
(curY)][curM])
cout
<<
"none"
<<
endl
;
else
{
cout
<<curY<<
'/'
;
if
(a/
10
)
cout
<<a;
else
cout
<<
'0'
<<a;
cout
<<
'/'
;
if
(d/
10
)
cout
<<d;
else
cout
<<
'0'
<<d;
cout
<<
endl
;
}
}
return
0
;
}
未完待续