不断更新中
【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页