-
Lesson 1 - 最简单的C程序
-
Lesson 2 - 打印输出
-
Lesson 3 - 循环打印
-
Lesson 4 - 判断奇偶
-
Lesson 5 - 从1加到100求和
-
Lesson 6 - 乘法表
-
Lesson 7 - 求100以内的最大素数
-
Lesson 8 - 1到100有多少个9
-
Lesson 9 - 整型转字符串
-
Lesson 10 - 约瑟夫环
-
Lesson 11 - 求两个坐标点之间的距离
-
Lesson 12 - 判断机器存储是否小尾端
-
Lesson 13 - 对不起,你的车今天限行
-
Lesson 14 - 判断地图上某点是否有出路
-
Lesson 15 - 统计一个数二进制表示中1的个数
-
Lesson 16 - 字符串拷贝
-
Lesson 17 - 统计单词个数
-
Lesson 18 - 实现 printf
-
Lesson 19 - 命令解释器
-
Lesson 20 - 预处理器实现
-
Lesson 21 - 词法分析器实现
-
Lesson 22 - 猜数游戏
-
Lesson 23 - 五子棋
-
Lesson 24 - 超链接分析器
-
Lesson 25 - cp命令实现
-
Lesson 26 - ELF文件头分析器实现
-
Lesson 27 - 简单流处理器实现和正则表达式
-
Lesson 28 - 数学计算器实现
-
Lesson 29 - 数学计算器实现more命令实现
-
Lesson 30 - sort命令实现
-
Lesson 31 - ls -l命令实现
-
Lesson 32 - Bash项目
-
Lesson 33 - 动态数组实现
-
Lesson 34 - 约瑟夫环问题
-
Lesson 35 - 表达式求值问题
-
Lesson 36 - 广度优先解决迷宫问题
-
Lesson 37 - 词频统计器
-
Lesson 38 - 堆排序问题
-
Lesson 39 - 构造符号表
-
Lesson 40 - MyDictionary项目
-
Lesson 41 - BSearch 实现
-
Lesson 42 - QSort 实现
-
Lesson 43 - 深度优先解决迷宫问题
-
Lesson 44 - KMP 算法实现
-
Lesson 45 - 最长公共子序列(LCS)问题
-
Lesson 46 - Dijkstra 算法
-
Lesson 47 - Huffman Coding 算法
-
Lesson 48 - 地图导航项目
Lesson 10 Josephus ring 约瑟夫环
#include <stdio.h>
#define ALL_NUM 100
#define COUNT_NUM 3
#define OUT_NUM 3
/* people id array such as (1,2,3,4,5,6) */
int people[ALL_NUM];
int main(void)
{
int left; /* left people number */
int pos; /* which pos */
int step; /* which step */
int i;
int counter = 0;
left = ALL_NUM;
pos = 0;
step = 0;
/* init id as 1,2,3,4,5,6 */
for (i = 0; i < ALL_NUM; i++)
people[i] = i + 1;
/* if there is still people in queue */
while (left > 0)
{
/* pos++? step++? left--? */
if (people[pos] > 0)
step++;
if (step == OUT_NUM && people[pos] != 0)
{
printf("%d out \n", people[pos]);
people[pos] = 0;
left--;
}
#if 1
pos = ++pos % ALL_NUM;
step = step % COUNT_NUM;
#else
pos++;
if (pos == ALL_NUM)
pos = 0;
if (step == COUNT_NUM)
step = 0;
#endif
}
return 0;
}
copy
语法知识点
- 函数设计 function
- 数据驱动编程
课堂讨论
- pos 和 step 变量,每次赋值用 if 和 直接赋值,在执行效率有什么不同?
- 在这个算法实现中,留在环里面的人越少,无效的比较次数越多,有什么办法可以优化算法?
- 如何使用数组实现在课堂讨论中想到的优化算法。
课后练习
- 增加一个变量,用来统计在以上算法执行过程中比较的次数。
- 已知2012年1月1日是星期日,请打印出全年的月历。要求用到函数,数组和循环。
- 用户输入10个数字,对它们进行排序,要求把所有奇数排前面,所有偶数排后面。
名人名言
- Rob Pike (Go语言之父,和Ken Thompson一起设计了UTF-8编码格式,现Google首席工程师。)
- “Data dominates. If you’ve chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.”
- “数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法。”
- “给我看流程图而不让我看(数据)表,我仍会茫然不解;如果给我看(数据)表,通常就不需要流程图了;数据表足够说明问题了。”