diff --git a/level1/p01_runningLetter/runningletter.c b/level1/p01_runningLetter/runningletter.c new file mode 100644 index 00000000..b3eca3ea --- /dev/null +++ b/level1/p01_runningLetter/runningletter.c @@ -0,0 +1,39 @@ +# include +# include +# include +# include + +# define WAITTIME 40 + +void print_space(int cnt); +int main(void) +{ + //获取屏幕宽度 + HANDLE handle_out; //定义一个句柄 + CONSOLE_SCREEN_BUFFER_INFO screen_info; //定义窗口缓冲区信息结构体 + handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄 + GetConsoleScreenBufferInfo(handle_out, &screen_info); //获取窗口信息 + const int LENGTH = screen_info.dwSize.X - 1; //screen_info.dwSize.X(缓冲区宽度,也就是横坐标最大值加1) + //功能实现 + int remainder, flag, steps; + for(int cnt = 0;; cnt++) + { + //主体逻辑部分, 实现循环 remainder和flag共同控制方向 + remainder = cnt % LENGTH; + flag = (cnt / LENGTH) % 2; + steps = abs(LENGTH * flag - remainder); + print_space(steps); + + printf("R"); + Sleep(WAITTIME); + system("cls"); + } + CloseHandle(handle_out); //关闭标准输出设备句柄 +} +void print_space(int steps) +{ + for(int i = 0; i < steps; i++) + { + printf(" "); + } +} diff --git a/level1/p02_isPrime/isprime.c b/level1/p02_isPrime/isprime.c new file mode 100644 index 00000000..dde5ff40 --- /dev/null +++ b/level1/p02_isPrime/isprime.c @@ -0,0 +1,36 @@ +# include +# include + +void is_prime(int n); +int main(void) +{ + long long int n; + printf("请输入一个整数:"); + if(scanf("%lld", &n)) + { + is_prime(n); + } + else + { + printf("Oops!你应该输入一个整数!"); + } + return 0; +} +void is_prime(int n) +{ + int i; + int sqrt_of_n = (int)sqrt(n); + for(i = 2; i <= sqrt_of_n; i++) + { + if(n % i == 0) break; + } + if(i > sqrt_of_n) + { + printf("您所输入的%d是素数\n", n); + } + else + { + printf("您输入的不是素数\n"); + } + +} diff --git a/level1/p03_Diophantus/diophantus.c b/level1/p03_Diophantus/diophantus.c new file mode 100644 index 00000000..a6ac1259 --- /dev/null +++ b/level1/p03_Diophantus/diophantus.c @@ -0,0 +1,14 @@ +# include +# define UPPERLIMIT 250 + +int main(void) +{ + for(double i = 0; i < UPPERLIMIT; i++) + { + if((i / 12 + i / 6 + i / 7 + 5 + i / 2 + 4) == i) + { + printf("当儿子死时, 丢番图的年龄为%.0f\n", i - 4); + break; + } + } +} diff --git a/level1/p04_ narcissus/narcissus.c b/level1/p04_ narcissus/narcissus.c new file mode 100644 index 00000000..691ea26f --- /dev/null +++ b/level1/p04_ narcissus/narcissus.c @@ -0,0 +1,31 @@ +# include +# include + +# define LOWERLIMIT 100 +# define UPPERLIMIT 1000 + +int main(void) +{ + printf("3位水仙花数为:\n"); + int number[3] = {0}; + for(int i = LOWERLIMIT; i < UPPERLIMIT; i++) + { + int j = 0, sum = 0; + int temp = i; + do + { + number[j++] = temp % 10; + temp /= 10; + } while(temp); + for(j = 0; j < 3; j++) + { + sum += pow(number[j], 3); + } + if(sum == i) + { + printf("%d\t", i); + } + } + printf("\n"); + return 0; +} diff --git a/level1/p05_allPrimes/allprimes.c b/level1/p05_allPrimes/allprimes.c new file mode 100644 index 00000000..ff4a1810 --- /dev/null +++ b/level1/p05_allPrimes/allprimes.c @@ -0,0 +1,48 @@ +# include +# include +# include + +# define LOWERLIMIT 2 +# define UPPERLIMIT 1000 + +int is_prime(int i); +int main(void) +{ + //测量时间 + clock_t start, finish; + double duration; + start = clock(); + //打印素数 + printf("2-1000内所有的素数为:\n"); + for(int i = LOWERLIMIT; i <= UPPERLIMIT; i++) + { + if(is_prime(i)) + { + printf("%d\t", i); + } + } + //测量时间 + finish = clock(); + duration = (double)(finish - start) / CLOCKS_PER_SEC; + printf("\n该程序运行总时间为: %f seconds\n", duration); + return 0; +} + +int is_prime(int i) +{ + int sqrt_of_i = (int)sqrt(i); + int j, if_is_prime; + for(j = 2; j <= sqrt_of_i; j++) + { + if(i % j == 0) break; + } + if(j > sqrt_of_i) + { + if_is_prime = 1; + } + else + { + if_is_prime = 0; + } + return if_is_prime; +} diff --git a/level1/p06_Goldbach/goldbach.c b/level1/p06_Goldbach/goldbach.c new file mode 100644 index 00000000..c47d061c --- /dev/null +++ b/level1/p06_Goldbach/goldbach.c @@ -0,0 +1,54 @@ +//Goldbach +# include +# include + +# define LENGTH 25 +# define LOWERLIMIT 2 +# define UPPERLIMIT 100 +# define LOWERLIMIT1 4 +# define UPPERLIMIT1 100 + +int is_prime(int n); +int main(void) +{ + int primes[LENGTH] = {0}; + for(int i = LOWERLIMIT, j = 0; i <= UPPERLIMIT; i++) + { + if(is_prime(i)) + { + primes[j++] = i; + } + } + for(int i = LOWERLIMIT1;i <= UPPERLIMIT; i += 2) + { + for(int j = 0; j < LENGTH; j++) + { + for(int k = 0; k < LENGTH; k++) + { + if(primes[j] + primes[k] == i) + { + printf("%d == %d + %d\n", i, primes[j], primes[k]); + } + } + } + } + return 0; +} +int is_prime(int n) +{ + int sqrt_of_n = (int)sqrt(n); + int i, if_is_prime; + for(i = 2; i <= sqrt_of_n; i++) + { + if(n % i == 0) break; + } + if(i > sqrt_of_n) + { + if_is_prime = 1; + } + else + { + if_is_prime = 0; + } + return if_is_prime; +} diff --git a/level1/p08_hanoi/hanoi.c b/level1/p08_hanoi/hanoi.c new file mode 100644 index 00000000..242c1706 --- /dev/null +++ b/level1/p08_hanoi/hanoi.c @@ -0,0 +1,29 @@ +/* +解决思想 +1.将A上面的n-1个通过B挪到C上 +2.将A上的另一个盘移到B上 +3.重复步骤即可实现 +4.采用递归实现 +*/ +# include + +void move(int steps, char A, char B, char C); +int main(void) +{ + int steps; + printf("请输入要移动的块数:"); + scanf("%d", &steps); + move(steps, 'A', 'B', 'C'); +} +void move(int steps, char A, char B, char C) +{ + if(steps == 1) + { + printf("%c --> %c\n", A, C);//当steps只有一个的时候直接从a移动到b上 + } else + { + move(steps - 1, A, C, B);//第n-1个要从a通过b移动到c + printf("%c --> %c\n", A, C); + move(steps - 1, B, A, C);//n-1个移动自后c变成了初始,c通过a移动到c + } +}