总结一下这次没发挥好的系内CSP:
A题冒号明明就是英文状态下的,但是他样例输出中的却是中文字符的冒号,导致我一开始是写的对的,但是就因为冒号的原因没A过,后面就给耽误了时间了。B题因为一开始拿到这种排序题是没有思路的,再加上我感觉他图例中的最后一位应该是36,但是他却写的35,一直等有没有人过来纠正,所以直接跳到第三个题上面去了,结果很扎心,C题时间内没有A出来,所以这次考试GG了。
问题 A: 时间都去哪儿了
题目
题目描述
假设从凌晨00:00:00开始以秒为单位计时,那么经过61秒,时间就是00:01:01, 如果经过1261秒那么时间就是00:21:01, 现在给定经过的秒数,请算出现在的时间。注意输出按时间的标准格式,24小时制,并且不足两位数的,高位补0。
输入
输入一个整数,表示计时器现在的秒数
输出
输出一个标准时间
样例输入
1261
样例输出
00:21:01
命题人
原题链接
由于我们学校的是内网系统,所以原题链接过不去也正常
More info:Question
AC源码(c++)
没什么要说的,但是就是冒号的关系,本来是觉得直接ctrl c+v过去就没问题的,结果还是手敲英文字符的冒号才过的
1 |
|
问题 B: 找出第n个数
题目
题目描述
已知一个无限大的矩阵的前面6行6列如下图所示,现在按红色线条所示的方法给所有数编号,那么前几个数分别为:1 2 2 3 4 3 4 6 6 4 …
现在给定任意的n, 请输出第n个数是多少? n <= 10000
(就是感觉这张图的最后一个数字应该是36才对,感觉有错可能没我想的那么简单,就直接跳去C题了,结果当时C题没A得过……)
输入
输入包括多行:
第一行:一个整数 t , 表示询问次数
接下来t行,每行一个整数n, 表示问第n个数
输出
输输出t行,每行一个整数
样例输入
3
3
5
17
样例输出
2
4
10
命题人
原题链接
由于我们学校的是内网系统,所以原题链接过不去也正常
More info:Question
AC源码(c++)
2点:
- 可以看做是一个金字塔一般的排列顺序:
第1行(共1个数):(1,1)
第2行(共2个数):(1,2) (2,1)
第3行(共3个数):(1,3) (2,2) (3,1)
第4行(共4个数):(1,4) (2,3) (3,2) (4,1)
……
第x行(共x个数):(1,x) (2,x-1) (3,x-2) (4,x-3) …(x,1)
所以第n个数可以表示为n=(1+2+…+x)+y的形式; - 对应矩阵图中的ai,j=i* j;
a[n]=x;(当y=0时)
a[n]=(x - y) * (y+1);(当y非0时)。
(其实貌似不用注意公式第1种情况,因为y=0时好像也适用于第二个公式,但是没试过,还是放出来吧就)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using namespace std;
const int maxn = 10001;
int x,y, n, t;
int main() {
cin >> t;
while (t--) {
cin >> n;
y = 0; x = 0;
while ((1 + x) * x / 2 < n) {
x++;
}
y = (1 + x) * x / 2 - n;
//cout << "x=" <<x << ";" <<"y="<< y << endl;
if (!y)cout << x << endl;
else cout << (x - y) * (y+1) << endl;
}
return 0;
}
Author: Zoey
Link: https://zoey1038569979.github.io/2019/08/30/qhuoj_csp3/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.