diff --git a/exercises/01_helloworld.c b/exercises/01_helloworld.c index e6100166bcb8fd1064fc94f2bb0e1a6952ba8bd1..348283f7383a344c9dc9bc14c2991e33244df6a5 100644 --- a/exercises/01_helloworld.c +++ b/exercises/01_helloworld.c @@ -1,11 +1,7 @@ #include -int main(){ - +int main() { // Print "Hello World!" to the console - - - - + printf("Hello World!\n"); return 0; } \ No newline at end of file diff --git a/exercises/02_loop.c b/exercises/02_loop.c index 3e361e61656c2d9ea05348a15fa275dcd3201b8a..5b8e739de8442bb64a92d7721cb710b122cd4625 100644 --- a/exercises/02_loop.c +++ b/exercises/02_loop.c @@ -1,13 +1,11 @@ #include -/** - * 编写一个C程序,打印出从1到10的整数序列。 - * 使用循环实现迭代,并且每次迭代结束后,通过标准输出打印当前的计数值,每个数值打印在新的一行上。 -*/ - int main(void) { - //TODO + // 使用for循环打印从1到10的整数序列 + for(int i = 1; i <= 10; i++) { + printf("%d\n", i); + } - return 0; + return 0; } \ No newline at end of file diff --git a/exercises/03_nested_loops.c b/exercises/03_nested_loops.c index d80c6903dd22e3305e35ff2bfb82f949e9975617..da6a3241ae673d7f164871f31dd899e5772bb6cd 100644 --- a/exercises/03_nested_loops.c +++ b/exercises/03_nested_loops.c @@ -1,17 +1,19 @@ #include -/** - * 题目描述: - * 编写一个C程序,打印出9x9乘法表的一部分。 - * 程序应该使用两个嵌套的 for 循环来实现。外层循环控制乘法表的行数,从1到9;内层循环控制每行中的列数,列数应该等于当前的行数。 - * 在每个内层循环中,程序应该打印出当前列数和行数的乘积,并且每个乘积后面跟随一个制表符 \t 以保持格式整齐。 - * 每行结束后,程序应该打印一个换行符 \n 以开始新的一行。 - * 参考输出格式 printf("%d*%d=%d\t", j, i, i * j); - */ - int main(void) -{ - //TODO +{ + int i, j; + + // 外层循环控制乘法表的行数,从1到9 + for(i = 1; i <= 9; i++) { + // 内层循环控制每行中的列数,列数等于当前的行数 + for(j = 1; j <= i; j++) { + // 打印出当前列数和行数的乘积,每个乘积后面跟随一个制表符 \t + printf("%d*%d=%d\t", j, i, i * j); + } + // 每行结束后,打印一个换行符 \n 以开始新的一行 + printf("\n"); + } - return 0; + return 0; } \ No newline at end of file diff --git a/exercises/04_prime_number.c b/exercises/04_prime_number.c index 28e3f5f8cd5dbb074c60d947c925a13d8918234e..6747a3724c01c827f32311bae006c040b68aefc6 100644 --- a/exercises/04_prime_number.c +++ b/exercises/04_prime_number.c @@ -1,19 +1,39 @@ #include #include -//查找100以内的最大素数 +// 函数原型声明 +int is_prime(int num); int main(void) { - int i, j; - int max = 0; + int i; + int max_prime = 0; // 假设最大素数为0,将根据实际情况更新 - for (i = 1; i <= 100; i++) - { - //TODO - } + for (i = 100; i > 1; i--) // 从100开始递减,因为100以内的最大素数不可能是100 + { + if (is_prime(i)) + { + max_prime = i; // 更新最大素数 + break; // 找到100以内的最大素数后退出循环 + } + } - printf("max = %d\n", max); + printf("max_prime = %d\n", max_prime); - return 0; + return 0; +} + +// 检查一个数是否为素数 +int is_prime(int num) +{ + int i; + if (num <= 1) return 0; // 小于等于1的数不是素数 + if (num == 2) return 1; // 2是素数 + if (num % 2 == 0) return 0; // 排除偶数 + for (i = 3; i <= sqrt(num); i += 2) // 只需检查奇数 + { + if (num % i == 0) + return 0; // 如果能被除尽,则不是素数 + } + return 1; // 是素数 } \ No newline at end of file diff --git a/exercises/05_josephus_ring.c b/exercises/05_josephus_ring.c index 330f2045f5cda70d21728503ef40accd04cea14f..8339369d86b2e7c7aa4a92a32ef34cd7f35ceb01 100644 --- a/exercises/05_josephus_ring.c +++ b/exercises/05_josephus_ring.c @@ -1,29 +1,39 @@ #include -/** - * 给定100个人站成一圈,从第1个人开始依次报数。 - * 每数到3的人将会被淘汰,然后继续从下一个人开始报数。 - * 这个过程会一直持续,直到所有的人都被淘汰。 - * 请编写一个C语言程序来模拟这个过程,并且输出每一个被淘汰人的编号。 - * 要求:输出每一个被淘汰人的编号,每淘汰一个人输出一行,格式为:"%d out \n"(每输出一次换行) -*/ +#define ALL_NUM 100 +#define COUNT_NUM 3 -#define ALL_NUM 100 -#define COUNT_NUM 3 -#define OUT_NUM 3 - -/* people id array such as (1,2,3,4,5,6) */ +/* people id array such as (1,2,3,4,5,6,...,100) */ int people[ALL_NUM]; -int main(void) -{ - int left; /* 剩余人数 */ - int pos; /* 当前报数位置 */ - int step; /* 当前报数 */ +int main(void) { + int i; + // 初始化编号数组 + for (i = 0; i < ALL_NUM; i++) { + people[i] = i + 1; + } + + int left = ALL_NUM; /* 初始剩余人数为100 */ + int pos = 0; /* 当前报数位置从0开始,因为数组索引从0开始 */ + int step = 1; /* 当前报数从1开始 */ + + // 循环直到所有人都被淘汰 + while (left > 1) { + // 每数到3的人被淘汰 + if (step % COUNT_NUM == 0) { + printf("%d out\n", people[pos]); + // 将被淘汰的人的编号设置为0 + people[pos] = 0; + // 更新剩余人数 + left--; + } + // 准备下一次报数 + pos = (pos + COUNT_NUM - 1) % ALL_NUM; // 报数到3的人被淘汰后,下一个人的位置 + step++; + } - //TODO - - + // 最后一个人被淘汰 + printf("%d out\n", people[pos]); - return 0; + return 0; } \ No newline at end of file