学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年CSP-J初赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客
(打印月历)输入月份m(1≤m≤12),按一定格式打印2015年第m月的月历。
例如,2015年1月的月历打印效果如下(第一列为周日)
#include <iostream>
using namespace std;
const int dayNum[] = {-1,31,28,31,30,31,30,31,31,30,31,30,31};
int m, offset, i;
int main() {
cin >> m;
cout << "S\tM\tT\tW\tT\tF\tS" << endl; // 't'为TAB制表符
__1__;
for (i=1; i<m; i++)
offset = __2__;
for (i=0; i<offset; i++)
cout << '\t';
for (i=1; i<=__3__; i++) {
cout << __4__;
if (i==dayNum[m] || __5__==0)
cout << endl;
else
cout << '\t';
}
return 0;
}
第27题
1处填:( )
【答案】:offset = 4
【解析】
图中1月周日~周三是空着的(4天)
第28题
2处填:( )
【答案】:(offset+dayNum[i])%7
【解析】
以2月为例,2月的offset就是0,那就是(1月的offset 4 + 1月的天数31) % 7 == 0,推出公式为(offset+dayNum[i])%7
第29题
3处填:( )
【答案】:dayNum[m]
【解析】
该for循环目标是输出每月的每一天,所以for循环的上限就是dayNum[m]
第30题
4处填:( )
【答案】:i
【解析】
输入第i天(即日期)
第31题
5处填:( )
【答案】:(i+offset)%7
【解析】
第i天加上offset后如果是模7为0,则说明需要换行
(中位数)给定n(n为奇数且小于1000)个整数,整数的范围在0~m( 0 < m < 2 31 0\lt m\lt 2^{31} 0<m<231)之间,请使用二分法求这n个整数的中位数。所谓中位数,是指将这n个数排序之后,排在正中间的数。
#include <iostream>
using namespace std;
const int MAXN = 1000;
int n, i, lbound, rbound, mid, m, count;
int x[MAXN];
int main() {
cin >> n >> m;
for (i=0; i<n; i++)
cin >> x[i];
lbound = 0, rbound = m;
while (__1__) {
mid = (lbound + rbound) / 2;
__2__;
for (i=0; i<n; i++)
if (__3__)
__4__;
if (count > n/2)
lbound = mid + 1;
else
__5__;
}
cout << rbound << endl;
}
第32题
1处填:( )
【答案】:lbound<rbound
【解析】
直到L==R时结束,反过来说就是L<R时继续
第33题
2处填:( )
【答案】:count = 0
【解析】
count重置为0
第34题
3处填:( )
【答案】:x[i]>mid
【解析】
统计x[i]>mid的个数
第35题
4处填:( )
【答案】:count++
【解析】
统计到满足x[i]>mid的,计数器加1
第36题
5处填:( )
【答案】:rbound = mid
【解析】
rbound就是最后的结果