chenchen题解:2008普及

    科技2024-07-31  31

    下面是关于NOIP2008的整理:

    完全二叉树共有2*n-1个结点,则它的叶结点数是( )

    解释:

    面向对象程序设计(Object-Oriented Programming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。下面关于面向对象程序设计的说法中,不正确的是( )。

    解释: 选项:面向对象程序设计通常采用自顶向下设计方法进行设计,是错误的。程序设计的方法包括:结构化设计和面向对象设计方法。结构化的程序设计通常采用自顶向下的设计方法,逐步求精。可以说,是大问题化成小问题,逐个求解。

    在 32 × 32 点阵的“字库”中,汉字“北”与“京”的字模占用字节数之和是(256)

    解释:

    书架上有 4 本不同的书 A、B、C、D。其中 A 和 B 是红皮的,C 和 D 是黑皮的。把这 4 本书摆在书架上,满足所有黑皮的书都排在一起的摆法有()种。满足 A 必须比 C 靠左,所有红皮的书要摆放在一起,所有黑皮的书要摆放在一起,共有()种摆法。

    解释:

    ` #include<iostream> #include<cstring> using namespace std; #define MAX 100 void solve(char first[], int spos_f, int epos_f, char mid[], int spos_m, int epos_m) { int i, root_m; if (spos_f > epos_f) return; for (i = spos_m; i <= epos_m; i++) if (first[spos_f] == mid[i]) { root_m = i; break; } solve(first, spos_f + 1, spos_f + (root_m - spos_m), mid, spos_m, root_m - 1); solve(first, spos_f + (root_m - spos_m) + 1, epos_f, mid, root_m + 1, epos_m); cout << first[spos_f]; } int main() { char first[MAX], mid[MAX]; int len; cin >> len; cin >> first >> mid; solve(first, 0, len - 1, mid , 0, len - 1); cout << endl; return 0; } `

    解释: 输入二叉树的先根遍历序列和后根遍历序列,求后根遍历序列:DBGEFCA

    (字符串替换)给定一个字符串 S(S 仅包含大小写字母),下面的程序将 S 中的每个字母用规定的字母替换,并输出 S 经过替换后的结果。程序的输入是两个字符串,第一个字符串是给定的字符串 S,第二个字符串 S’ 由 26 个字母组成,它是 a−z 的任一排列,大小写不定,S’ 规定了每个字母对应的替换字母:S 中的第一个字母是字母 A 和 a 的替换字母,即 S 中的 A 用该字母的大写替换, S 中的 a 用该字母的小写替换;S’ 中的第二个字母是字母 B 和 b 的替换字母,即 S 中的 B 用该字母的大写替换,S 中的 b 用该字母的小写替换;……以此类推。 #include <iostream> #include <string.h> char change[26], str[5000]; using namespace std; void CheckChangeRule() { int i; for (i = 0;i < 26; i++) { if () change[i] -= 'A' - 'a'; } } void ChangeString() { int i; for (i = 0;i <strlen(str); i++) { if () str[i] = change[str[i] - 'A'] -'a' + 'A'; else} } int main() { int i; cin >> str ; cin >> change; CheckChangeRule(); ④ cout << str << endl; return 0; }

    解释:

    #include <iostream> using namespace std; int a[1000001],n,ans = -1; void swap(int &a,int &b) { int c; c = a; a = b; b = c; } int FindKth(int left, int right, int n) { int tmp, value, i, j; if (left == right) return left; tmp = rand()% (right - left) + left; swap(a[tmp], a[left]); value = ① i = left; j = right; while (i < j) { while (i < j &&) j --; if (i < j) { a[i] = a[j]; i++; } else break; while (i < j &&) i++; if (i < j) { a[j] = a[i]; j--; } else break; }if (i < n) return FindKth(); if (i > n) returnreturn i; } int main() { int i; int m = 1000000; for (i = 1; i <= m; i++) cin >> a[i]; cin >> n; ans = FindKth(1, m, n); cout << a[ans]; return 0; } `

    解释:

    Processed: 0.010, SQL: 8