现在的位置: 首页 > 竞赛 > 正文

模拟试题提示

2011年04月27日 竞赛 ⁄ 共 976字 ⁄ 字号 暂无评论

不断更新中

【1 回文串】

假设现在有个字符串 ABCDCBA,其长度为7。
这个字符串是回文串吗?

a[0] == a[6];
a[1] == a[5];
a[2] == a[4];
a[3] == a[3];

所以是回文串。
在比较过程中,一旦发现有不相等的情况出现,就设置标志 x=0,然后跳出循环。

【2 进制转换】
运用了迭代的技巧。

10010转换成十进制的过程是这样的:

n = 0;
n = n*2 + 1 = 1;
n = n*2 + 0 = 2;
n = n*2 + 0 = 4;
n = n*2 + 1 = 9;
n = n*2 + 0 = 18;

字符 ‘8’转为 数字 8 的方法是: n = '8' - '0';

【3 找出中间数】
这道题实际上就是对三个数进行手动排序,然后输出中间数。

三个数要进行几次比较才能完成排序? 3次。

自己动手对三个数 1 2 3 进行排序。

1 2 3 的排列总共有六种:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

【4 求出某个日期是该年度的第几天】

你先要想好几个测试数据:
1980-01-01
1982-12-31
1984-12-31

从 days[flag][i] 可以看出, days是个二维数组。

flag的范围是 [0,1], [i]的范围是 [0, 1, ... , 10, 11]

本题实质上就是给 days 赋初始值。

【5 m个A,n个B可以组合成多少个不同排列】
数学问题,递归

找出 f(m,n) 和 f(m-1, n) f(m, n-1) 之间的关系。

【6 杨辉三角形】
数学问题,递归

f(m,n) 是哪两个数之和

【7 蛇形填空】
《算法竞赛入门经典》第35页

和本题有细微的差别,起始位置有所不同。

【8 距离国庆多少天】
可以充分利用第4题的结果

有两类情况,先从简单的做起。

1 如果是1949年的某一天,只需计算出这一天是1949年的第几天,然后减去10月1日的日期。
2 1959年10月01日, 1959年距离1949年有几年,这几年中有几年是闰年

【9 校验信用卡号码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
#define MAXN 100
 
int main(int argc, char *argv[])
{
    char p[MAXN];
    int i, n, sum;
 
    while (scanf("%s", p)!=EOF) {
        n = strlen(p);
        sum = 0;
        i = n-1;
 
        此处省略若干行代码;
 
        if (sum%10==0)
            printf("Pass\n");
        else
            printf("Fail\n");
    }
    return 0;
}

【10 5位循环圈】

《算法竞赛入门经典》第77页

抱歉!评论已关闭.