noip二十三届全国青少年信息学奥赛初赛试题及答案c

for (i = 0; i < 256; i++) t[i] = 0; for (i = 0; i < s.length(); i++) t[s[i]]++; for (i = 0; i < s.length(); i++) if (t[s[i]] == 1) { cout << s[i] << endl; return 0; }

cout << \}

输入:xyzxyw 输出:_________

2.#include using namespace std; int g(int m, int n, int x) { int ans = 0; int i;

if (n == 1) return 1;

for (i = x; i <= m / n; i++) ans += g(m - i, n - 1, i); return ans; } int main() { int t, m, n; cin >> m >> n;

cout << g(m, n, 0) << endl; return 0; }

输入:7 3 输出:_________

3.#include using namespace std; int main() { string ch; int a[200]; int b[200]; int n, i, t, res; cin >> ch; n = ch.length();

for (i = 0; i < 200; i++) b[i] = 0;

for (i = 1; i <= n; i++) { a[i] = ch[i - 1] - '0'; b[i] = b[i - 1] + a[i]; }

res = b[n]; t = 0;

for (i = n; i > 0; i--) { if (a[i] == 0) t++;

if (b[i - 1] + t < res) res = b[i - 1] + t; }

cout << res << endl; return 0; } 输入:

输出:_________

4.#include using namespace std;

int main() { int n, m; cin >> n >> m; int x = 1;

int y = 1; int dx = 1; int dy = 1; int cnt = 0; while (cnt != 2) { cnt = 0; x= x + dx; y= y + dy;

if (x == 1 || x == n) { ++cnt; dx = -dx; }

if (y == 1 || y == m) { ++cnt; dy = -dy; } }

cout << x << \}

输入 1:4 3

输出 1:_________(3 分) 输入 2:2017 1014

输出 2:_________(5 分)

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

1.(快速幂)请完善下面的程序,该程序使用分治法求xp?mod m 的值。(第一空 2 分,其余 3 分)

输入:三个不超过 10000 的正整数 x,p,m。 输出:xp?mod m 的值。

提示:若 p 为偶数,xp=(x2)p/2;若 p 为奇数,xp=x*(x2)(p-1)/2。 #include using namespace std; int x, p, m, i, result; int main() { cin >> x >> p >> m;

result =?? ? ? ? ?(1) ? ? ? ??; while (?? ? ? ? ?(2) ? ? ? ??) { if (p % 2 == 1)

result =?? ? ? ? ?(3) ? ? ? ??; p /= 2;

x =?? ? ? ? ?(4) ? ? ? ??; }

cout <

联系客服:779662525#qq.com(#替换为@)