NOIP2016初赛普及组C++题目及答案 联系客服

发布时间 : 星期一 文章NOIP2016初赛普及组C++题目及答案更新完毕开始阅读faeaa5b7370cba1aa8114431b90d6c85ec3a88af

2. 约定二叉树的根节点高度为 1。一棵结点数为 2016的二叉树最少有

_________个叶子结点;一棵结点数为 2016的二叉树最小的高度值是

_________。

三、阅读程序写结果(共 4 题,每题 8 分,共计 32 分)

1. #include

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 << \return 0;

}

输入: 1 2 3 4 5 6 0 7 输出:_________

2. #include

using namespace std;

int main() {

CCF NOIP2016 初赛普及组 C++语言试题

第 5 页,共 9 页

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

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. #include

using namespace std;

int main() {

int i, length1, length2; string s1, s2;

s1 = \

CCF NOIP2016 初赛普及组 C++语言试题

第 6 页,共 9 页

s2 = \length1 = s1.size(); length2 = s2.size();

for (i = 0; i < length1; i++)

if (s1[i] >= 'a' && s1[i] <= 'z')

s1[i] -= 'a' - 'A';

for (i = 0; i < length2; i++)

if (s2[i] >= 'a' && s2[i] <= 'z')

s2[i] -= 'a' - 'A';

if (s1 == s2)

cout << \else if (s1 > s2)

cout << \else

cout << \return 0; }

输出:_________

四、完善程序(共 2 题,每题 14 分,共计 28 分)

1. (读入整数)请完善下面的程序,使得程序能够读入两个 int 范围内的整数,

并将这两个整数分别输出,每行一个。(第一、五空 2.5 分,其余 3 分)

输入的整数之间和前后只会出现空格或者回车。输入数据保证合法。

例如:

输入:

123 -789

输出:

123

-789

#include using namespace std;

int readint() {

int num = 0; // 存储读取到的整数 int negative = 0; // 负数标识 char c; // 存储当前读取到的字符 c = cin.get();

while ((c < '0' || c > '9') && c != '-')

c = (1) ;

CCF NOIP2016 初赛普及组 C++语言试题

第 7 页,共 9 页

if (c == '-')

negative = 1; else (2) ; c = cin.get(); while ( (3) ) {

(4) ; c = cin.get(); }

if (negative == 1)

(5) ;

return num; }

int main()

{ int a, b;

a = readint(); b = readint();

cout << a << endl << b << endl; return 0; }

2. (郊游活动)有 n 名同学参加学校组织的郊游活动,已知学校给这 n 名同学

的郊游总经费为 A 元,与此同时第 i 位同学自己携带了 Mi 元。为了方便郊 游,活动地点提供 B(≥n)辆自行车供人租用,租用第 j 辆自行车的价格为 Cj 元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管 理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多 有多少位同学能够租用到自行车。(第四、五空 2.5 分,其余 3 分)

本题采用二分法。对于区间[l, r],我们取中间点 mid 并判断租用到自行 车的人数能否达到 mid。判断的过程是利用贪心算法实现的。 #include using namespace std; #define MAXN 1000000

int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid; bool check(int nn)

{ int count = 0, i, j; i = (1) ; j = 1; while (i <= n) { if ( (2) )

CCF NOIP2016 初赛普及组 C++语言试题

第 8 页,共 9 页