一晃又是noip2018了
今天先进行普及组初赛摸底
计划做两套题(noip2016、noip2014,这两套题比较中规中矩),分析一下大家的知识点缺陷,然后每个人再进行有针对性的学习。
重点是 看程序写结果,完善程序
noip2016的题目相对简单,又有一些小陷阱,比较适合提醒大家注意细节
二十二届 2016
一、选择
二分:
14. 给定含有 n 个不同的数的数组 L=<x 1 , x2 , ..., xn >。如果 L 中存在 x(i1 < i < n) 使得 x1 < x2 < ... < xi -1 < xi > xi+1 > ... > xn , 则称 L 是单峰的,并称 xi 是 L 的“峰顶”。现在已知 L 是单峰的,请把 a-c 三行代码补全到算法中使得算法 正确找到 L 的峰顶。
a. Search(k+1, n)
b. Search(1, k-1)
c. return L[k]
Search(1, n)
1. k<-[n/2]
2. if L[k] > L[k-1] and L[k] > L[k+1]
3. then __________
4. else if L[k] > L[k-1] and L[k] < L[k+1]
5. then __________
6. else __________
正确的填空顺序是( )。
三、看程序写结果
1. //求最大、最小、累加求和、求平均
#include <iostream>
using namespace std;
int main() {
int max, min, sum, count = 0;
int tmp;
cin >> tmp;
if (tmp == 0)
return 0;
max = min = sum = tmp;
count++;
while (tmp != 0) {
cin >> tmp;
if (tmp != 0) {
sum += tmp;
count++;
if (tmp > max) max = tmp;
if (tmp < min) min = tmp;
}
}
cout << max << "," << min << "," << sum / count << endl;
return 0;
}
输入: 1 2 3 4 5 6 0 7
输出:_________
2. //计数器
#include <iostream>
using namespace std;
int main() {
int i = 100, x = 0, y = 0;
while (i > 0) {
i--;
x = i % 8;
if (x == 1) y++;
}
cout << y << endl;
return 0;
}
输出:_________
3. //将数组倒序输出,最大的坑是输出的末尾有一个",",很多同学都没打。
#include <iostream>
using namespace std;
int main() {
int a[6] = {1, 2, 3, 4, 5, 6};
int pi = 0;
int pj = 5;
int t , i;
while (pi < pj) {
t = a[pi];
a[pi] = a[pj];
a[pj] = t;
pi++;
pj--;
}
for (i = 0; i < 6; i++) cout << a[i] << ",";
cout << endl;
return 0;
}
输出:_________
4.//字符串的比较,大小写转换