diff --git a/level1/p01_runningLetter/runningLetter.c b/level1/p01_runningLetter/runningLetter.c new file mode 100644 index 00000000..d54c3eb0 --- /dev/null +++ b/level1/p01_runningLetter/runningLetter.c @@ -0,0 +1,36 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include +#define SCREEN_WID 50 +#define SLEEP_TIME 100 + +int main() +{ + system("mode con cols=50 lines=20"); + int length_word; + char words[50]; + scanf("%s", &words); + length_word = strlen(words); + for (int space_left = 0; space_left <= SCREEN_WID - length_word; space_left++) + { + for (int n = 0; n < space_left; n++) + { + printf(" "); + } + printf("%s", words); + Sleep(100); + system("CLS"); + } + for (int space_left = SCREEN_WID - length_word; space_left > 0; space_left--) + { + for (int n = space_left; n > 0; n--) + { + printf(" "); + } + printf("%s", words); + Sleep(SLEEP_TIME); + system("CLS"); + } + return 0; +} \ No newline at end of file diff --git a/level1/p02_isPrime/isPrime.c b/level1/p02_isPrime/isPrime.c new file mode 100644 index 00000000..71a7cfde --- /dev/null +++ b/level1/p02_isPrime/isPrime.c @@ -0,0 +1,24 @@ +#define _CRT_SECURE_NO_WARNINGS +#include + +void main() +{ + int input_n; + scanf("%lld", &input_n); + if (input_n == 1) + { + printf("The number is not a Prime.\n"); + goto bottom; + } + for (int n = 2; n*n <= input_n; n++) + { + if (input_n%n == 0) + { + printf("The number is not a Prime.\n"); + break; + } + printf("The number is a Prime.\n"); + } + getchar(); + getchar(); +} \ No newline at end of file diff --git a/level1/p03_Diophantus/Diophantus.c b/level1/p03_Diophantus/Diophantus.c new file mode 100644 index 00000000..af088117 --- /dev/null +++ b/level1/p03_Diophantus/Diophantus.c @@ -0,0 +1,21 @@ +#define _CRT_SECURE_NO_WARNINGS +#include + +void main() +{ + int d_age; + int s_age; + for (int n = 1; n < 1000; n++) + { + if (n % 12 == 0) + if (n % 7 == 0) + { + s_age = 5 + (n / 12) + (n / 7) + (n / 6); + d_age = s_age * 2; + break; + } + } + printf("Diophantus is %d years old.", d_age); + getchar(); + getchar(); +} \ No newline at end of file diff --git a/level1/p04_ narcissus/narcissus.c b/level1/p04_ narcissus/narcissus.c new file mode 100644 index 00000000..694785ec --- /dev/null +++ b/level1/p04_ narcissus/narcissus.c @@ -0,0 +1,20 @@ +#define _CRT_SECURE_NO_WARNINGS +#include + +int power(int num, int times); + +void main() +{ + int p1, p2, p3; + for (int n=100; n < 1000; n++) + { + p1 = n % 10; + p2 = (n % 100) / 10; + p3 = (n - p1 - p2) / 100; + if (n == p1 * p1*p1 + p2 * p2*p2 + p3 * p3*p3) + { + printf("%d\n", n); + } + } + getchar(); +} \ No newline at end of file diff --git a/level1/p05_allPrimes/allPrimes.c b/level1/p05_allPrimes/allPrimes.c new file mode 100644 index 00000000..06bcd8de --- /dev/null +++ b/level1/p05_allPrimes/allPrimes.c @@ -0,0 +1,21 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include + +void main() +{ + printf("2\n3\n4\n"); + for (int i = 2; i <= 1000; i++) + { + for (int n = 2; n*n <= i; n++) + { + if (i%n == 0) + break; + if ((n+1)*(n+1) > i) + printf("%d\n", i); + } + } + printf("total time is:%ld ms",clock()); + getchar(); +} \ No newline at end of file diff --git a/level1/p06_Goldbach/Goldbach.c b/level1/p06_Goldbach/Goldbach.c new file mode 100644 index 00000000..58cd3a78 --- /dev/null +++ b/level1/p06_Goldbach/Goldbach.c @@ -0,0 +1,51 @@ +#define _CRT_SECURE_NO_WARNINGS +#include + +int make_primes(int *prime); + +void main() +{ + int n_prime = 26; //100内有25个质数和证明所需用到的1 + int prime[26]; + make_primes(prime); + for (int n = 3; n <= 100; n++) + { + for (int n1 = 0; n1 < 26; n1++) + { + for (int n2 = 1; n2 < 26; n2++) + { + if (prime[n1] + prime[n2] == n) + { + printf("%d = %d + %d\n", n, prime[n1], prime[n2]); + } + else if (prime[n1] + prime[n2] > n) + { + break; + } + } + } + } + getchar(); +} + +int make_primes(int *prime) +{ + prime[0] = 1; + prime[1] = 2; + prime[2] = 3; + int n_p=3; + for (int i = 2; i <= 100; i++) + { + for (int j = 2; j*j <= i; j++) + { + if (i%j == 0) + break; + else if ((j + 1)*(j + 1) > i && (j + 1)*(j + 1) != i) + { + prime[n_p] = i; + n_p++; + break; + } + } + } +} \ No newline at end of file diff --git a/level1/p07_encrypt_decrypt/encrypt_decrypt.c b/level1/p07_encrypt_decrypt/encrypt_decrypt.c new file mode 100644 index 00000000..a51ed243 --- /dev/null +++ b/level1/p07_encrypt_decrypt/encrypt_decrypt.c @@ -0,0 +1,36 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include + +void encrypt(char *words_1, int n); +void decrypt(char *words_1, int n); + +void main() +{ + char words[10000]; + scanf("%s", &words); + int l_words = strlen(words); + encrypt(words, l_words); + printf("%s", words); + getchar(); + getchar(); + decrypt(words, l_words); + printf("%s", words); + getchar(); +} + +void encrypt(char *words_1, int n) +{ + for (int i = 0; i < n; i++) + { + words_1[i] = words_1[i] + 1; + } +} + +void decrypt(char *words_1, int n) +{ + for (int i = 0; i < n; i++) + { + words_1[i] = words_1[i] - 1; + } +} \ No newline at end of file diff --git a/level1/p08_hanoi/hanoi.c b/level1/p08_hanoi/hanoi.c new file mode 100644 index 00000000..fc64755c --- /dev/null +++ b/level1/p08_hanoi/hanoi.c @@ -0,0 +1,27 @@ +#include +#define LEVEL_HANOI 64 + +void move(int level, char A, char B, char C); + +void main() +{ + char A = 'A'; + char B = 'B'; + char C = 'C'; + move(LEVEL_HANOI, A, B, C); + getchar(); +} + +void move(int level, char A, char B, char C) +{ + if (level == 1) + { + printf("%c --> %c\n", A, C); + } + else + { + move(level - 1, A, C, B); + printf("%c --> %c\n", A, C); + move(level - 1, B, A, C); + } +} \ No newline at end of file diff --git a/level1/p09_maze/maze.c b/level1/p09_maze/maze.c new file mode 100644 index 00000000..e0d7b015 --- /dev/null +++ b/level1/p09_maze/maze.c @@ -0,0 +1,125 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include +#include + +void create_maze(int maze[][20]); +void draw(int maze[][20]); +enum symbol{ empty, wall, player, terminal }; + +void main() +{ + system("mode con cols=50 lines=22"); + int dir; + int maze[20][20]; + int posi[2] = {1,1}; +replay: + dir = 0; + create_maze(maze); + maze[1][1] = player; + draw(maze); + while(maze[18][18] != player) + { + dir = _getch(); + switch (dir) + { + case 72: //up + if (maze[posi[0] - 1][posi[1]] == empty || maze[posi[0] - 1][posi[1]] == terminal) + { + maze[posi[0]][posi[1]] = empty; + posi[0] = posi[0] - 1; + maze[posi[0]][posi[1]] = player; + draw(maze); + } + break; + case 80: //down + if (maze[posi[0] + 1][posi[1]] == empty || maze[posi[0] + 1][posi[1]] == terminal) + { + maze[posi[0]][posi[1]] = empty; + posi[0] = posi[0] + 1; + maze[posi[0]][posi[1]] = player; + draw(maze); + } + break; + case 75: //left + if (maze[posi[0]][posi[1] - 1] == empty || maze[posi[0]][posi[1] - 1] == terminal) + { + maze[posi[0]][posi[1]] = empty; + posi[1] = posi[1] - 1; + maze[posi[0]][posi[1]] = player; + draw(maze); + } + break; + case 77: //right + if (maze[posi[0]][posi[1] + 1] == empty || maze[posi[0]][posi[1] + 1] == terminal) + { + maze[posi[0]][posi[1]] = empty; + posi[1] = posi[1] + 1; + maze[posi[0]][posi[1]] = player; + draw(maze); + } + break; + case 'r': //recreate a maze + { + goto replay; + break; + } + default:; + } + } + +} + +void create_maze(int maze[][20]) +{ + for (int n1 = 1; n1 < 19; n1++) + { + for (int n2 = 1; n2 < 19; n2++) + { + if (rand() % 4 + 1 > 1) + { + maze[n1][n2] = empty; + } + else + { + maze[n1][n2] = wall; + } + } + } + for (int n = 0; n < 20; n++) + { + maze[0][n] = wall; + maze[19][n] = wall; + maze[n][0] = wall; + maze[n][19] = wall; + } + maze[18][18] = terminal; +} + +void draw(int maze[][20]) +{ + system("cls"); + for (int i = 0; i < 20; i++) + { + for (int j = 0; j < 20; j++) + { + switch (maze[i][j]) + { + case empty: + printf(" "); + break; + case wall: + printf("墙"); + break; + case player: + printf("你"); + break; + case terminal: + printf("终"); + break; + } + } + printf("\n"); + } +} \ No newline at end of file diff --git a/level1/p10_pushBoxes/level1.txt b/level1/p10_pushBoxes/level1.txt new file mode 100644 index 00000000..1ec21240 --- /dev/null +++ b/level1/p10_pushBoxes/level1.txt @@ -0,0 +1,15 @@ +111111111111111 +120100000000001 +100100111100001 +100004000100001 +100000000101401 +111111100101001 +100000000101001 +100100001100001 +104100000000001 +100111001111001 +100100000000001 +111111111100001 +100000000000001 +133300000000001 +111111111111111 \ No newline at end of file diff --git a/level1/p10_pushBoxes/pushBoxes.c b/level1/p10_pushBoxes/pushBoxes.c new file mode 100644 index 00000000..db4172eb --- /dev/null +++ b/level1/p10_pushBoxes/pushBoxes.c @@ -0,0 +1,216 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include +#include +#define map_size 15 + +int set_level(int set_level, int map[][15], FILE *level); +void draw(int map[][15],int steps); +void refill_terminal(int map[][15]); +enum symbol { empty, wall, player, terminal ,box}; + +void main() +{ + system("mode con cols=60 lines=22"); + FILE *level; + int select_level; + int step_count = 0; + int dir = 0; + int map[15][15]; + int posi[2] = {1,1}; +re_select: + printf("please input a number between 1-3 to select levels.\n"); + scanf("%d", &select_level); + if (set_level(select_level, map, &level)) + { + goto re_select; + } + draw(map,step_count); + while (map[13][1] != box || map[13][2] != box || map[13][3] != box) + { + dir = _getch(); + switch (dir) + { + case 72: //up + step_count++; + if (map[posi[0] - 1][posi[1]] == empty || map[posi[0] - 1][posi[1]] == terminal) + { + map[posi[0]][posi[1]] = empty; + posi[0] = posi[0] - 1; + map[posi[0]][posi[1]] = player; + } + else if (map[posi[0] - 1][posi[1]] == box && (map[posi[0] - 2][posi[1]] == empty || map[posi[0] - 2][posi[1]] == terminal)) + { + map[posi[0]][posi[1]] = empty; + map[posi[0] - 1][posi[1]] = player; + posi[0] = posi[0] - 1; + map[posi[0] - 1][posi[1]] = box; + } + refill_terminal(map); + draw(map, step_count); + break; + case 80: //down + step_count++; + if (map[posi[0] + 1][posi[1]] == empty || map[posi[0] + 1][posi[1]] == terminal) + { + map[posi[0]][posi[1]] = empty; + posi[0] = posi[0] + 1; + map[posi[0]][posi[1]] = player; + } + else if (map[posi[0] + 1][posi[1]] == box && (map[posi[0] + 2][posi[1]] == empty || map[posi[0] + 2][posi[1]] == terminal)) + { + map[posi[0]][posi[1]] = empty; + map[posi[0] + 1][posi[1]] = player; + posi[0] = posi[0] + 1; + map[posi[0] + 1][posi[1]] = box; + } + refill_terminal(map); + draw(map, step_count); + break; + case 75: //left + step_count++; + if (map[posi[0]][posi[1] - 1] == empty || map[posi[0]][posi[1] - 1] == terminal) + { + map[posi[0]][posi[1]] = empty; + posi[1] = posi[1] - 1; + map[posi[0]][posi[1]] = player; + } + else if (map[posi[0]][posi[1] - 1] == box && (map[posi[0]][posi[1] - 2] == empty || map[posi[0]][posi[1] - 2] == terminal)) + { + map[posi[0]][posi[1]] = empty; + map[posi[0]][posi[1] - 1] = player; + posi[1] = posi[1] - 1; + map[posi[0]][posi[1] - 1] = box; + } + refill_terminal(map); + draw(map, step_count); + break; + case 77: //right + step_count++; + if (map[posi[0]][posi[1] + 1] == empty || map[posi[0]][posi[1] + 1] == terminal) + { + map[posi[0]][posi[1]] = empty; + posi[1] = posi[1] + 1; + map[posi[0]][posi[1]] = player; + } + else if (map[posi[0]][posi[1] + 1] == box && (map[posi[0]][posi[1] + 2] == empty || map[posi[0]][posi[1] + 2] == terminal)) + { + map[posi[0]][posi[1]] = empty; + map[posi[0]][posi[1] + 1] = player; + posi[1] = posi[1] + 1; + map[posi[0]][posi[1] + 1] = box; + } + refill_terminal(map); + draw(map, step_count); + break; + } + } + system("cls"); + printf("666 你赢了 666\n"); + system("pause"); +} + +int set_level(int set_level, int map[][15],FILE *level) +{ + char ch = '0'; + int num_n; + int n1 = 0; + int n2 = 0; + switch (set_level) + { + case 1: + level = fopen("level1.txt", "r"); + break; + case 2: + level = fopen("level2.txt", "r"); + break; + case 3: + level = fopen("level3.txt", "r"); + break; + } + if (level == NULL) + { + printf("can not find the map file.\nplease try another level.\n"); + return 1; + } + while (ch != EOF) + { + ch = fgetc(level); + switch (ch) + { + case '0': + num_n = 0; + break; + case '1': + num_n = 1; + break; + case '2': + num_n = 2; + break; + case'3': + num_n = 3; + break; + case '4': + num_n = 4; + break; + default: + break; + } + if (ch != '\n') + { + map[n1][n2] = num_n; + n2++; + } + else + { + n1++; + n2 = 0; + } + } + fclose(level); + return 0; +} + +void draw(int map[][15],int steps) +{ + system("cls"); + for (int i = 0; i < 15; i++) + { + for (int j = 0; j < 15; j++) + { + switch (map[i][j]) + { + case empty: + printf(" "); + break; + case wall: + printf("墙"); + break; + case player: + printf("你"); + break; + case terminal: + printf("终"); + break; + case box: + printf("箱"); + break; + } + } + printf("\n"); + } + printf("您已移动%d步。\n", steps); +} + +void refill_terminal(int map[][15]) +{ + for (int i = 1; i <= 3; i++) + { + if (map[13][i] != box && map[13][i] != player) + { + map[13][i] = terminal; + } + } + +} \ No newline at end of file diff --git a/level1/p11_linkedList/linkedList.c b/level1/p11_linkedList/linkedList.c new file mode 100644 index 00000000..be0f65fa --- /dev/null +++ b/level1/p11_linkedList/linkedList.c @@ -0,0 +1,62 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include +#define N_NODE 100 //假设有100个结点 +#define MAX_VALUE 10 //链表中value的最大值 +#define MIN_VALUE 0 //链表中value的最小值 + +int main() +{ + int n = N_NODE; + int found = 0; + struct node { + int value; + struct node *next; + } *head, *node_a, *node_b,*inverse, *node_c; + head = node_a = (struct node *)malloc(sizeof(struct node)); + node_a->value = rand() % ((MAX_VALUE - MIN_VALUE)) + MIN_VALUE; + for (int i = 0; i < N_NODE; i++) + { + node_b = (struct node *)malloc(sizeof(struct node)); + node_a -> next = node_b; + node_a = node_b; + node_a->value = rand() % ((MAX_VALUE - MIN_VALUE)) + MIN_VALUE; + } + node_a->next = NULL; + inverse = node_a; + node_b = inverse; + for (int i = 0; i < N_NODE; i++,--n) + { + node_a = head; + for (int j = 0; j < n; j++) + { + node_a = node_a->next; + } + if (i != 0) + { + node_b->next = node_a; + node_b = node_a; + } + } + node_b->next = NULL; + node_a = inverse; + printf("序号从0开始计算\n"); + for (int i = 0; i < N_NODE; i++) + { + if (i != 0) + { + node_a = node_a->next; + } + if (node_a->value == 5) + { + printf("序号为:%d\n", i); + found = 1; + } + } + if (found == 0) + { + printf("-1"); + } + system("pause"); +} \ No newline at end of file diff --git a/level1/p12_warehouse/goods_list.dat b/level1/p12_warehouse/goods_list.dat new file mode 100644 index 00000000..1b5f1efd Binary files /dev/null and b/level1/p12_warehouse/goods_list.dat differ diff --git a/level1/p12_warehouse/warehouse.c b/level1/p12_warehouse/warehouse.c new file mode 100644 index 00000000..89b6d697 --- /dev/null +++ b/level1/p12_warehouse/warehouse.c @@ -0,0 +1,185 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include + +_Bool select_mode(void); +_Bool show_list(void); +_Bool storage(void); +_Bool outbound(void); + +struct goods { + int id; + char name[30]; + int number; +}good; +_Bool error = 0; + +int main() +{ + system("mode con cols=50 lines=20"); + select_mode(); +} + +_Bool select_mode(void) +{ + int mode; +re_input: + system("cls"); + for (int i = 0; i < 50; i++) + { + printf("*"); + } + for (int i = 0; i < 21; i++) + { + printf(" "); + } + printf("选择模式\n"); + + for (int i = 0; i < 50; i++) + { + printf("*"); + } + printf("\n1.显示存货列表.\n"); + printf("2.入库\n"); + printf("3.出库\n"); + printf("4.退出程序"); + scanf("%d",&mode); + switch (mode) + { + case 1: + show_list(); + system("pause"); + break; + case 2: + storage(); + break; + case 3: + outbound(); + break; + case 4: + return 1; + default: + printf("错误的输入\n请尝试正确的输入\n"); + system("pause"); + } + goto re_input; +} + +_Bool show_list(void) +{ + system("cls"); + FILE *list; + list = fopen("goods_list.dat", "rb"); + if (list == NULL) + { + return 1; + } + printf("\tID"); + printf("\t名称"); + printf("\t数量\n"); + while (fread(&good, sizeof(struct goods), 1, list) != 0) + { + printf("\t%d", good.id); + printf("\t%s", good.name); + printf("\t%d\n", good.number); + } + fclose(list); + return 0; +} + +_Bool storage(void) +{ + int id; + char mode; + FILE *list; +input_more: + system("cls"); + show_list(); + printf("1.向存货列表中添加新的货物。\n"); + printf("2.添加存货数量.\n"); + printf("按r返回上级菜单.\n"); + good.id = 0; + scanf("%c",&mode); + switch (mode) + { + case '1': + printf("请输入货物id:\n"); + scanf("%d", &good.id); + printf("请输入货物名称:\n"); + scanf("%s", &good.name); + printf("请输入货物数量:\n"); + scanf("%d", &good.number); + list = fopen("goods_list.dat", "rb+"); + if (list == NULL) + { + return 1; + } + fseek(list,0,2); + fwrite(&good, sizeof(struct goods), 1, list); + fclose(list); + break; + case '2': + printf("请输入货物id以增加货物数量:\n"); + scanf("%d", &id); + list = fopen("goods_list.dat", "rb+"); + while(fread(&good, sizeof(struct goods), 1, list) != 0) + { + if (good.id = id) + { + int add_num=0; + printf("\t%d\t%s\t%d\n",good.id, good.name, good.number); + printf("请输入增量:\n"); + scanf("%d", &add_num); + good.number += add_num; + fseek(list, -(int)sizeof(struct goods), 1); + fwrite(&good, sizeof(struct goods), 1, list); + fclose(list); + break; + } + } + break; + case 'r': + return 0; + } + goto input_more; +} +_Bool outbound(void) +{ + system("cls"); + int id; + char mode; + FILE *list; +input_more: + good.id = 0; + list = fopen("goods_list.dat", "rb+"); + if (list == NULL) + { + return 1; + } + show_list(); + printf("按r返回上级菜单.\n"); + printf("或输入存货id:\n"); + scanf("%c",&mode); + if (mode == 'r') + { + return 0; + } + scanf("%d",&id); + while(fread(&good, sizeof(struct goods), 1, list) != 0) + { + if (good.id == id) + { + int jian_num = 0; + printf("\t%d\t%s\t%d\n", good.id, good.name, good.number); + printf("请输入减少量:\n"); + scanf("%d", &jian_num); + good.number -= jian_num; + fseek(list, -(int)sizeof(struct goods), 1); + fwrite(&good, sizeof(struct goods), 1, list); + fclose(list); + break; + } + } + goto input_more; +} \ No newline at end of file