Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions level1/p01_runningLetter/runningletter.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# include <stdio.h>
# include <stdlib.h>
# include <Windows.h>
# include <conio.h>

# 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(" ");
}
}
36 changes: 36 additions & 0 deletions level1/p02_isPrime/isprime.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# include <stdio.h>
# include <math.h>

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");
}

}
14 changes: 14 additions & 0 deletions level1/p03_Diophantus/diophantus.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# include <stdio.h>
# 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;
}
}
}
31 changes: 31 additions & 0 deletions level1/p04_ narcissus/narcissus.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# include <stdio.h>
# include <math.h>

# 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;
}
48 changes: 48 additions & 0 deletions level1/p05_allPrimes/allprimes.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# include <stdio.h>
# include <math.h>
# include <time.h>

# 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;
}
54 changes: 54 additions & 0 deletions level1/p06_Goldbach/goldbach.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
//Goldbach
# include <stdio.h>
# include <math.h>

# 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;
}
29 changes: 29 additions & 0 deletions level1/p08_hanoi/hanoi.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
解决思想
1.将A上面的n-1个通过B挪到C上
2.将A上的另一个盘移到B上
3.重复步骤即可实现
4.采用递归实现
*/
# include <stdio.h>

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
}
}