From 0569ed91a89b0bc94cbf8a6da139ff452a41e49d Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Sun, 7 Mar 2021 15:44:24 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86running=20letter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- level1/p01_runningLetter/runningLetter.c | 66 ++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 level1/p01_runningLetter/runningLetter.c diff --git a/level1/p01_runningLetter/runningLetter.c b/level1/p01_runningLetter/runningLetter.c new file mode 100644 index 00000000..a0ac347f --- /dev/null +++ b/level1/p01_runningLetter/runningLetter.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +//constants +enum{ N = 1000 , sleep_time = 50}; +char space[N]; +int i; +//func +int GetWidth(); +int abs(int x); +//entertainment +void DrawLine(int width); +void ChangeColor(int cnt); + +int main(int argc, char const *argv[]) +{ + printf("Please enter several letters within a line:\n"); + //Init + char str[N]; scanf("%s",str); + int len = strlen(str); + int width = GetWidth(); + int pos; + //Play + int cnt = 0; + while (1) { + /*calculate pos*/ + pos = width - abs(width - ( cnt++ % (2 * width) ) ); + /*prevent crossing the border*/ + if (pos + len > width) continue; + + ChangeColor(cnt); + system("cls"); + DrawLine(width); + /*Output*/ + for (i = 0; i < width; ++ i) + space[i] = i < pos || i >= pos + len ? ' ' : str[i - pos]; + space[i] = '\0'; + printf("%s",space); + + DrawLine(width); + /*Sleep a while, let the user watch.*/ + Sleep(sleep_time); + } + return 0; +} +int GetWidth() +{ + CONSOLE_SCREEN_BUFFER_INFO scr; + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hOut, &scr); + return scr.dwMaximumWindowSize.X; +} +int abs(int x) +{ + return x >= 0 ? x : -x; +} +void DrawLine(int width) +{ + for (i = 0; i < width; ++ i) space[i] = '*'; space[i] = '\0'; + printf("%s\n",space); +} +void ChangeColor(int cnt) { + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),cnt % 16); + // SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(cnt % 16) * 16 + 16 - (cnt % 16)); +} \ No newline at end of file From 99f952d39e98dbbd4e8340380c59b6c4c8c9f369 Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Tue, 9 Mar 2021 18:58:51 +0800 Subject: [PATCH 2/7] finished some --- level1/p02_isPrime/isPrime.c | 17 ++++++++ level1/p03_Diophantus/Diophantus.c | 12 +++++ level1/p04_ narcissus/narcissus.c | 17 ++++++++ level1/p05_allPrimes/allPrimes.c | 32 ++++++++++++++ level1/p06_Goldbach/Goldback.c | 33 ++++++++++++++ level1/p07_encrypt_decrypt/encrypt_decrypt.c | 46 ++++++++++++++++++++ level1/p08_hanoi/hanoi.c | 15 +++++++ 7 files changed, 172 insertions(+) create mode 100644 level1/p02_isPrime/isPrime.c create mode 100644 level1/p03_Diophantus/Diophantus.c create mode 100644 level1/p04_ narcissus/narcissus.c create mode 100644 level1/p05_allPrimes/allPrimes.c create mode 100644 level1/p06_Goldbach/Goldback.c create mode 100644 level1/p07_encrypt_decrypt/encrypt_decrypt.c create mode 100644 level1/p08_hanoi/hanoi.c diff --git a/level1/p02_isPrime/isPrime.c b/level1/p02_isPrime/isPrime.c new file mode 100644 index 00000000..2bd5a726 --- /dev/null +++ b/level1/p02_isPrime/isPrime.c @@ -0,0 +1,17 @@ +#include +int main(){ + int n,i; + scanf("%d",&n); + if (n <= 1) { + printf("error"); + return 0; + } + for (i = 2; i <= n / i; ++ i) { + if (n % i == 0) { + printf("Not prime."); + return 0; + } + } + printf("Is prime."); + return 0; +} \ 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..3d1aeaae --- /dev/null +++ b/level1/p03_Diophantus/Diophantus.c @@ -0,0 +1,12 @@ +#include +int main(){ + double t; + for (t = 5; ; ++ t) { + if (t / 6 + t / 12 + t / 7 + 5 + t / 2 + 4 == t) { + printf("%g\n",t - 4); + break; + } + } + system("pause"); + return 0; +} \ 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..ace53d27 --- /dev/null +++ b/level1/p04_ narcissus/narcissus.c @@ -0,0 +1,17 @@ +#include +int is_narcissus(int x){ + int a = x / 100; + int c = x % 10; + int b = (x - a * 100 - c) / 10; + if (x == a * a * a + b * b * b + c * c * c) + return 1; + else return 0; +} +int main(){ + int i; + for (i = 100; i <= 999; ++ i) { + if (is_narcissus(i)) printf("%d\n",i); + } + system("pause"); + return 0; +} \ 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..295ccc85 --- /dev/null +++ b/level1/p05_allPrimes/allPrimes.c @@ -0,0 +1,32 @@ +#include +#include +enum {N = 1001}; +int primes[N], cnt; +int sieved[N]; + +void get_primes(int n); +int main(int argc, char const *argv[]) +{ + clock_t timer = clock(); + get_primes(1000); + int i; + for (i = 0; i < cnt; ++ i) { + printf("%d\t",primes[i]); + } + printf("\nTime:%dms\n",clock() - timer); + system("pause"); + return 0; +} +void get_primes(int n) +{ + int i,j; + for (i = 2; i <= n; i ++ ) + { + if (!sieved[i]) primes[cnt ++ ] = i; + for (j = 0; primes[j] <= n / i; j ++ ) + { + sieved[primes[j] * i] = 1; + if (i % primes[j] == 0) break; + } + } +} \ No newline at end of file diff --git a/level1/p06_Goldbach/Goldback.c b/level1/p06_Goldbach/Goldback.c new file mode 100644 index 00000000..e92d2c4c --- /dev/null +++ b/level1/p06_Goldbach/Goldback.c @@ -0,0 +1,33 @@ +#include +enum {N = 100}; +int sieved[N + 1]; +int primes[N + 1],cnt; +int i,j,k,l; +void init_primes(); +int main(){ + init_primes(); + for (i = 6; i <= N; ++ i){ + for (j = 0; j < cnt; ++ j) + for (k = 0; k < cnt; ++ k) + for (l = 0; l < cnt; ++ l) + if (primes[j] + primes[k] + primes[l] == i) { + printf("%d == %d + %d + %d\n",i,primes[j],primes[k],primes[l]); + goto flag; + } + printf("It is wrong within 100!"); + flag: + ; + } + printf("It is verified that Goldbach conjecture is right within 100.\n"); + system("pause"); + return 0; +} +void init_primes(){ + for (i = 2; i <= N; ++ i) { + if (!sieved[i]) { + primes[cnt ++] = i; + for (j = i + i; j <= N; j += i) + sieved[j] = 1; + } + } +} \ 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..fdb4d781 --- /dev/null +++ b/level1/p07_encrypt_decrypt/encrypt_decrypt.c @@ -0,0 +1,46 @@ +#include +#include +typedef struct string { + char * str; + int length; + int capacity; +} string; +void get_str(string * str); +void init_str(string * str); +void update(string * str); +int main(int argc, char const *argv[]) +{ + string str; + get_str(&str); + int i; + for (i = 0; i < str.length; ++ i){ + putchar(str.str[i]); + } + return 0; +} + +void get_str(string * str) { + init_str(str); + char ch; + while (ch = getchar()) { + if (ch == '\n') break; + update(str); + str->str[str->length++] = ch; + } +} +void init_str(string * str) { + str -> length = 0; + str -> capacity = 10; + str -> str = (char*)malloc(sizeof(char) * str -> capacity); +} +void update(string * str) { + if (str -> length > str -> capacity - 3) { + str -> capacity += str -> capacity / 2; + + char * p = (char*)malloc(sizeof(char) * str -> capacity); + int i; + for (i = 0; i < str -> length; ++ i) + p[i] = str -> str[i]; + str -> str = p; + } +} \ 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..490e0bcb --- /dev/null +++ b/level1/p08_hanoi/hanoi.c @@ -0,0 +1,15 @@ +#include +void hanoi(int n,char origin,char medium,char dest) { + if (n == 1) { + printf("%c -> %c\n", origin, dest); + return; + } + hanoi(n-1,origin,dest,medium); + printf("%c -> %c\n", origin, dest); + hanoi(n-1,medium,origin,dest); +} +int main() { + int n = 3; + hanoi(n,'A','B','C'); + return 0; +} \ No newline at end of file From 93018aa9e4bca500aa096e80636a97169d0f54b9 Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Tue, 9 Mar 2021 19:16:26 +0800 Subject: [PATCH 3/7] finished some --- level1/p07_encrypt_decrypt/encrypt_decrypt.c | 32 +++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/level1/p07_encrypt_decrypt/encrypt_decrypt.c b/level1/p07_encrypt_decrypt/encrypt_decrypt.c index fdb4d781..3f9bb097 100644 --- a/level1/p07_encrypt_decrypt/encrypt_decrypt.c +++ b/level1/p07_encrypt_decrypt/encrypt_decrypt.c @@ -1,5 +1,6 @@ #include #include +char book[] = "18381048095"; typedef struct string { char * str; int length; @@ -8,17 +9,38 @@ typedef struct string { void get_str(string * str); void init_str(string * str); void update(string * str); +void encrypt(string * str); +void decrypt(string * str); +void showStr(string * str); int main(int argc, char const *argv[]) { string str; get_str(&str); - int i; - for (i = 0; i < str.length; ++ i){ - putchar(str.str[i]); - } + printf("original:\t"); + showStr(&str); + encrypt(&str); + printf("encrypted:\t"); + showStr(&str); + decrypt(&str); + printf("decrypted:\t"); + showStr(&str); return 0; } - +void showStr(string * str) { + int i; + for (i = 0; i < str->length; ++ i){ + putchar(str->str[i]); + } + putchar('\n'); +} +void encrypt(string * str) { + int i; + for (i = 0; i < str -> length; ++ i) str -> str[i] += book[i % 11] - '0'; +} +void decrypt(string * str) { + int i; + for (i = 0; i < str -> length; ++ i) str -> str[i] -= book[i % 11] - '0'; +} void get_str(string * str) { init_str(str); char ch; From af40af8d09cf036d651d21e5a37ff808c5dee2c1 Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Tue, 9 Mar 2021 19:28:28 +0800 Subject: [PATCH 4/7] nice --- level1/p07_encrypt_decrypt/encrypt_decrypt.c | 26 ++++++++++++-------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/level1/p07_encrypt_decrypt/encrypt_decrypt.c b/level1/p07_encrypt_decrypt/encrypt_decrypt.c index 3f9bb097..f56a281b 100644 --- a/level1/p07_encrypt_decrypt/encrypt_decrypt.c +++ b/level1/p07_encrypt_decrypt/encrypt_decrypt.c @@ -14,16 +14,22 @@ void decrypt(string * str); void showStr(string * str); int main(int argc, char const *argv[]) { - string str; - get_str(&str); - printf("original:\t"); - showStr(&str); - encrypt(&str); - printf("encrypted:\t"); - showStr(&str); - decrypt(&str); - printf("decrypted:\t"); - showStr(&str); + printf("Please enter the letters:\n"); + string * str = (string *)malloc(sizeof(string)); + get_str(str); + char ch; + printf("Enter 'e' to encrypt it, 'd' to decrypt it and 'q' to quit.\n"); + while (ch = getchar()) { + if (ch == 'q') break; + else if (ch == 'e') encrypt(str); + else if (ch == 'd') decrypt(str); + else if (ch == '\n') continue; + else { + printf("Invalid input!\n"); + continue; + } + showStr(str); + } return 0; } void showStr(string * str) { From badab6c4f97f229f29afc536cfbcd884fab09d72 Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Sat, 13 Mar 2021 17:09:24 +0800 Subject: [PATCH 5/7] all finished.... --- level1/p09_maze/maze.c | 141 +++++++++++++++++ level1/p10_pushBoxes/maps.txt | 40 +++++ level1/p10_pushBoxes/pushBoxes.c | 244 +++++++++++++++++++++++++++++ level1/p11_linkedList/linkedList.c | 85 ++++++++++ level1/p12_warehouse/data.txt | 9 ++ level1/p12_warehouse/warehouse.c | 97 ++++++++++++ 6 files changed, 616 insertions(+) create mode 100644 level1/p09_maze/maze.c create mode 100644 level1/p10_pushBoxes/maps.txt create mode 100644 level1/p10_pushBoxes/pushBoxes.c create mode 100644 level1/p11_linkedList/linkedList.c create mode 100644 level1/p12_warehouse/data.txt create mode 100644 level1/p12_warehouse/warehouse.c diff --git a/level1/p09_maze/maze.c b/level1/p09_maze/maze.c new file mode 100644 index 00000000..f6d7d94f --- /dev/null +++ b/level1/p09_maze/maze.c @@ -0,0 +1,141 @@ +#include +#include +#include +#include +#include +int c_r, c_c, ch, i, j,quitflag; +enum {Width = 50, Height = 25}; +char out[(Width+1) * (Height+1)]; +int dir[4][2] = { + {0,1}, + {0,-1}, + {1,0}, + {-1,0} +}; +int ** map = NULL; +int * set = NULL; +void init(); +void victory(); +void showMap(int ** map); +void dig(); +int find(int x); +void interact(); +int main() { + while (1) { + init(); + dig(); + system("cls"); + showMap(map); + printf("Use WASD or arrows to move to '$'.\n"); + while (c_r != Height - 1 || c_c != Width - 1) { + interact(); + } + victory(); + if (quitflag) break; + } + printf("\nThanks for playing."); + return 0; +} +void init() { + srand((unsigned)time(0)); + c_r = c_c = 0; + if (!set) set = (int *)malloc(Height * Width * sizeof(int)); + for (i = 0; i < Height * Width; ++ i) set[i] = i; + if (!map) map = (int **)malloc(Height * sizeof(int *)); + for (i = 0; i < Height; ++ i) { + map[i] = (int *)malloc(Width * sizeof(int)); + } + for (i = 0; i < Height; ++ i) + for (j = 0; j < Width; ++ j) + map[i][j] = 1; +} +void dig() { + while (1) { + int p1 = find(0), p2 = find(Height * Width - 1); + if (p1 == p2) { + break; + } + int r = rand() % Height, c = rand() % Width; + int cnt = 0; + for (i = 0; i < 4; ++ i) { + int nr = r + dir[i][0], nc = c + dir[i][1]; + if (nr >= 0 && nr < Height && nc >= 0 && nc < Width && !map[nr][nc]) { + cnt ++; + } + } + if (cnt <= 3 && map[r][c]) { + map[r][c] = 0; + int i; + for (i = 0; i < 4; ++ i) { + int nr = r + dir[i][0], nc = c + dir[i][1]; + if (nr >= 0 && nr < Height && nc >= 0 && nc < Width && !map[nr][nc]) { + int p_1 = find(r * Width + c); + int p_2 = find(nr * Width + nc); + set[p_2] = p_1; + } + } + } + } +} +void showMap(int ** map) { + int cnt = 0; + int i,j; + for (i = 0; i < Height; ++ i) { + + for (j = 0; j < Width; ++ j) + { + if (i == c_r && j == c_c) out[cnt++] = '*'; + else if (i == Height - 1 && j == Width - 1) out[cnt++] = '$'; + else if (map[i][j]) out[cnt++] = 'O'; + else out[cnt++] = ' '; + } + out[cnt++] = '\n'; + } + out[cnt] = '\0'; + printf("%s",out); +} +int find(int x) { + if (set[x] != x) set[x] = find(set[x]); + return set[x]; +} +void interact() { + if (_kbhit()) { + + ch = _getch(); + int n_r = c_r, n_c = c_c; + if (ch == 75 || ch == 97) { + n_c -= 1; + } + if (ch == 72 || ch == 119) { + n_r -= 1; + } + if (ch == 77 || ch == 100) { + n_c += 1; + } + if (ch == 80 || ch == 115) { + n_r += 1; + } + if (n_r >= 0 && n_r < Height && n_c >= 0 && n_c < Width && !map[n_r][n_c]) { + c_r = n_r, c_c = n_c; + } + system("cls"); + showMap(map); +} +} +void victory() { + quitflag = 0; + system("cls"); + printf("You win!\nEnter q to quit and r to restart."); + while (1) { + if (_kbhit()) { + ch = _getch(); + if (ch == 113) { + quitflag = 1; + break; + } + else if (ch == 114) break; + system("cls"); + printf("You win!\nEnter q to quit and r to restart."); + } + } +} \ No newline at end of file diff --git a/level1/p10_pushBoxes/maps.txt b/level1/p10_pushBoxes/maps.txt new file mode 100644 index 00000000..c73db96a --- /dev/null +++ b/level1/p10_pushBoxes/maps.txt @@ -0,0 +1,40 @@ +OOOOOOO +O $ O +O # O +O$#*#$O +O # O +O $ O +OOOOOOO +& +OOOOOOOOO +O $O$ O +O O +O O# O +O #*# O +O O#O O +O O +O $O$ O +OOOOOOOOO +& +OOOOOOOOOOO +O $ # $ O +O O # O +O O#O O +O$O * O$O +O O#O O +O # O O +O $ # $ O +OOOOOOOOOOO +& +OOOOOOOOOOOOO +O$ O $O +O O O O O O O +O O +O ### O +O$O$O#*#O$O$O +O ### O +O O +O O O O O +O$ O $O +OOOOOOOOOOOOO +& \ 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..f23f0f6f --- /dev/null +++ b/level1/p10_pushBoxes/pushBoxes.c @@ -0,0 +1,244 @@ +#include +#include +#include +#include +enum {MapNum = 10,MaxNum = 100, WinNum = 4}; +enum {Space, Wall, Box, Dest, BoxOverDest, P, LineBreak, BoxInDest, PInDest}; +int *** maps = NULL; +char ch; +int Steps = 0, quitflag = 0; +int i, j; +int cur_map = 0; +struct map +{ + int row; + int col; +}mapInfo[MapNum]; +struct player +{ + int row; + int col; +}player; +// void swap(char *a,char *b); +void Move(int n_r,int n_c); +int NotOut(int rr, int cc); +int char2int(char c); +char int2char(int t); +void Update(); +void GetPlayerPosition(); +void initMaps(); +void showMap(); +void restart(); +void interact(); +int victory(); +int main(int argc, char const *argv[]) +{ + FILE * score_file = fopen("score.txt","w"); + system("cls"); + initMaps(); + GetPlayerPosition(); + Update(); + while(1) { + interact(); + if (quitflag) break; + if (victory()) { + fprintf(score_file,"The level %d takes totally %d steps, the score is %d\n",cur_map,Steps,(1000 + 10000 * cur_map) / Steps); + Steps = 0; + cur_map ++; + if (cur_map == WinNum) { + printf("You win!"); + break; + } + system("cls"); + GetPlayerPosition(); + Update(); + } + } + fclose(score_file); + return 0; +} + +void initMaps() +{ + maps = (int ***)malloc(sizeof(int **)*MapNum); + for (i = 0; i < MapNum; ++ i) { + maps[i] = (int**)malloc(sizeof(int*)*MaxNum); + for (j = 0; j < MaxNum; ++ j) { + maps[i][j] = (int*)malloc(sizeof(int)*MaxNum); + } + } + + FILE * maps_file = fopen("maps.txt","r"); + int mapcnt = 0,rowcnt = 0, colcnt = 0; + while (~(ch = fgetc(maps_file))) { + if (ch == '&'){ + mapInfo[mapcnt].row = rowcnt; + mapcnt++; + rowcnt = 0; + colcnt = 0; + fgetc(maps_file); + continue; + } + else if (ch == '\n') { + mapInfo[mapcnt].col = colcnt; + maps[mapcnt][rowcnt][colcnt++] = char2int(ch); + rowcnt ++; + colcnt = 0; + continue; + } + maps[mapcnt][rowcnt][colcnt++] =char2int(ch); + }; + fclose(maps_file); +} +void GetPlayerPosition() +{ + for (i = 0; i < mapInfo[cur_map].row; ++ i) + for (j = 0; j < mapInfo[cur_map].col; ++ j) { + if (maps[cur_map][i][j] == P) player.row = i, player.col = j; + } +} +void Update() +{ + char show[1000]; + int cnt = 0; + for (i = 0; i < mapInfo[cur_map].row; ++ i) + for (j = 0; j < mapInfo[cur_map].col + 1; ++ j) { + show[cnt++] = int2char(maps[cur_map][i][j]); + } + show[cnt] = '\0'; + printf("%s",show); + printf("Please move the '#'(box) to the '$'(destination), note that you can move the box in the '$' and you can alse walk on the '$'"); + printf("\nYou can use WASD to move.\nYou can hit R to restart or Q to quit.\n"); + printf("\nNow you have walk %d steps.\n",Steps); +} +void interact() { + if (_kbhit()) { + + ch = _getch(); + int n_r = player.row, n_c = player.col; + if (ch == 114) { + restart(); + return; + } + else if (ch == 113) { + Steps ++; + quitflag = 1; + return; + } + if (ch == 97) { + Steps ++; + n_c -= 1; + } + else if (ch == 119) { + Steps ++; + n_r -= 1; + } + else if (ch == 100) { + Steps ++; + n_c += 1; + } + else if (ch == 115) { + Steps ++; + n_r += 1; + } + Move(n_r,n_c); + system("cls"); + Update(); + } +} +int NotOut(int rr, int cc) { + return rr >= 0 && rr < mapInfo[cur_map].row && cc >= 0 && cc < mapInfo[cur_map].col; +} +// void swap(char * a, char * b) { +// char t = *a; +// *a = *b; +// *b = t; +// } +int char2int(char c) { + if (c == '*') return P; + else if (c == ' ') return Space; + else if (c == 'O') return Wall; + else if (c == '#') return Box; + else if (c == '$') return Dest; + else if (c == '\n') return LineBreak; +} +char int2char(int t) { + if (t == P) return '*'; + else if (t == Space) return ' '; + else if (t == Wall) return 'O'; + else if (t == Box) return '#'; + else if (t == Dest) return '$'; + else if (t == LineBreak) return '\n'; + else if (t == BoxInDest) return '#'; + else if (t == PInDest) return '*'; +} +int victory() { + for (i = 0; i < mapInfo[cur_map].row; ++ i) { + for (j = 0; j < mapInfo[cur_map].col; ++ j) { + if (maps[cur_map][i][j] == Box) return 0; + } + } + return 1; +} +void restart() { + Steps = 0; + free(maps); + maps = NULL; + initMaps(); + GetPlayerPosition(); + system("cls"); + Update(); +} +void Move(int n_r,int n_c) { + //前方空地 + if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == Space) { + maps[cur_map][n_r][n_c] = P; + + maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; + player.row = n_r, player.col = n_c; + } + //前方归位点 + if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == Dest) { + maps[cur_map][n_r][n_c] = PInDest; + maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; + player.row = n_r, player.col = n_c; + } + //前方归位箱 + if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == BoxInDest) { + int b_n_r = n_r + n_r - player.row; + int b_n_c = n_c + n_c - player.col; + //箱子前方空地 + if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Space) { + maps[cur_map][n_r][n_c] = PInDest; + maps[cur_map][b_n_r][b_n_c] = Box; + maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; + player.row = n_r, player.col = n_c; + } + //箱子前方归位点 + else if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Dest) { + maps[cur_map][n_r][n_c] = PInDest; + maps[cur_map][b_n_r][b_n_c] = BoxInDest; + maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; + player.row = n_r, player.col = n_c; + } + } + //前方箱子 + if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == Box) { + int b_n_r = n_r + n_r - player.row; + int b_n_c = n_c + n_c - player.col; + //箱子前方空地 + if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Space) { + maps[cur_map][n_r][n_c] = P; + maps[cur_map][b_n_r][b_n_c] = Box; + maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; + player.row = n_r, player.col = n_c; + } + //箱子前方归位点 + else if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Dest) { + maps[cur_map][n_r][n_c] = P; + maps[cur_map][b_n_r][b_n_c] = BoxInDest; + maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; + player.row = n_r, player.col = n_c; + } + } +} \ 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..64167478 --- /dev/null +++ b/level1/p11_linkedList/linkedList.c @@ -0,0 +1,85 @@ +#include +#include +typedef struct node{ + struct node * next; + int val; +} * node; +node head,point5; +int num; +char ch; +int cnt = 0,endflag = 0; +void reverse(node n); +void show(); +void add(int x); +void init(); +int main() { + init(); + printf("Please enter:\n\tq to quit,\n\tc to create\n\tn to get next order of 5\n\tr to reverse\n"); + while (ch = getchar()) { + putchar('\n'); + if (ch == 'q') break;//退出 + else if (ch == 'n') printf("%d",next5());//下一个5 + else if (ch == 'c') {//创建 + printf("Please enter several numbers(enter non-numeric to end input)(such as 1 5 2 e):\n"); + init(); + while (scanf("%d",&num)) { + add(num); + } + show(); + } + else if (ch == 'r') { + reverse(head->next); + show(); + } + } + // show(); +} +void init() { + point5 = NULL; + endflag = 0; + cnt = 0; + head = (node)malloc(sizeof(*head)); + head->next = NULL; + head->val = 0; +} +void add(int x) { + node p = head; + while (p->next != NULL) p = p->next; + node n_p = (node)malloc(sizeof(*n_p)); + n_p->next = NULL; + n_p->val = x; + p->next = n_p; +} +void show() { + putchar('\n'); + node p = head->next; + while (p != NULL) { + printf("%d\t",p->val); + p = p->next; + } + putchar('\n'); +} +void reverse(node n) { + if (!n) return; + //如果递归到n是最后一个节点 + if (!n->next) { + head -> next = n; + return; + } + node next = n -> next; + if (n == head -> next) n -> next = NULL; //构造尾节点 + reverse(next); + next -> next = n; +} +int next5() { + if (endflag) return -1; + if (!point5) point5 = head; + point5 = point5 -> next; + cnt += 1; + while (point5 && point5 -> val != 5) cnt ++, point5 = point5 -> next; + if (!point5) { + endflag = 1; + return -1; + } + else return cnt; +} \ No newline at end of file diff --git a/level1/p12_warehouse/data.txt b/level1/p12_warehouse/data.txt new file mode 100644 index 00000000..99769b3b --- /dev/null +++ b/level1/p12_warehouse/data.txt @@ -0,0 +1,9 @@ +PLP-12 +12 +12 +EQS-12 +23 +12 +RFD-42 +12 +13 diff --git a/level1/p12_warehouse/warehouse.c b/level1/p12_warehouse/warehouse.c new file mode 100644 index 00000000..05d3c296 --- /dev/null +++ b/level1/p12_warehouse/warehouse.c @@ -0,0 +1,97 @@ +#include +#include +#include +#define MAX_SIZE 100 +char filename[] = "data.txt",tempfile_name[] = "temp.txt"; +char put[MAX_SIZE],get[MAX_SIZE]; +int i; +void CheckIn(); +FILE * OpenData(char * filename); +void Log(FILE * data_file); +char * ReadLine(FILE * data_file); +void ListWare(); +void CheckOut(); + +int main(int argc, char const *argv[]) +{ + + printf("Please hit\n\t1 to list wares\n\t2 to check in\n\t3 to check out\n\t4 to quit.\n"); + int ch; + while (1) { + if (_kbhit()) { + ch = _getch(); + if (ch == 49) { + ListWare(); + } + else if (ch == 50) { + CheckIn(); + } + else if (ch == 51) { + CheckOut(); + } + else if (ch == 52) { + break; + } + } + } + printf("Thanks for using"); + return 0; +} +void CheckOut() { + FILE * data_file = OpenData(filename); + FILE * temp_file = OpenData(tempfile_name); + char model_number[MAX_SIZE]; + printf("Please enter the model number you want to check out:\n"); + fgets(model_number,MAX_SIZE,stdin); + printf("Having successfully checked out %s",model_number); + while (ReadLine(data_file)) { + fseek(temp_file,0L,SEEK_END); + if (strcmp(model_number,get)) { + fputs(get,temp_file); + } + else { + ReadLine(data_file);ReadLine(data_file); + } + } + fclose(temp_file); + fclose(data_file); + remove(filename); + rename(tempfile_name,filename); +} +FILE * OpenData(char * filename) { + FILE * data_file = fopen(filename,"r+"); + if (NULL == data_file) { + data_file = fopen(filename,"w+"); + } + return data_file; +} +void ListWare() { + FILE * data_file = OpenData(filename); + printf("We already have following wares:\n"); + fseek(data_file,0L,SEEK_SET); + for (i = 0;; ++ i) { + if (!ReadLine(data_file))break; + if (!(i % 3)) + printf("\t%s",get); + } + fclose(data_file); +} +void Log(FILE * data_file) { + fgets(put,MAX_SIZE,stdin); + fseek(data_file,0L,SEEK_END); + fputs(put,data_file); +} +char * ReadLine(FILE * data_file) { + return fgets(get,MAX_SIZE,data_file); +} +void CheckIn() { + FILE * data_file = OpenData(filename); + printf("Please enter the model number:\n"); + Log(data_file); + printf("Please enter the quantity:\n"); + Log(data_file); + printf("Please enter the weight(XXkg):\n"); + Log(data_file); + printf("OK, the ware is successfully checked in!\n"); + fclose(data_file); +} \ No newline at end of file From cd175f416390e81d023c81df4ef499bf6b9bcc00 Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Sat, 13 Mar 2021 17:28:32 +0800 Subject: [PATCH 6/7] Modified a little --- level1/p11_linkedList/linkedList.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/level1/p11_linkedList/linkedList.c b/level1/p11_linkedList/linkedList.c index 64167478..d6c4f51e 100644 --- a/level1/p11_linkedList/linkedList.c +++ b/level1/p11_linkedList/linkedList.c @@ -20,11 +20,14 @@ int main() { if (ch == 'q') break;//退出 else if (ch == 'n') printf("%d",next5());//下一个5 else if (ch == 'c') {//创建 - printf("Please enter several numbers(enter non-numeric to end input)(such as 1 5 2 e):\n"); + printf("Please enter several numbers:\n"); init(); - while (scanf("%d",&num)) { + do { + scanf("%d",&num); add(num); } + while (getchar() != '\n'); + printf("We create:\n"); show(); } else if (ch == 'r') { From ec02100b765706c1774b4d17d95cc7154b56520d Mon Sep 17 00:00:00 2001 From: hayaku-iku <2548340423@qq.com> Date: Tue, 16 Mar 2021 22:52:50 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- level1/p01_runningLetter/runningLetter.c | 4 +- level1/p09_maze/maze.c | 80 ++++++++++++++--------- level1/p10_pushBoxes/maps.txt | 12 ++++ level1/p10_pushBoxes/pushBoxes.c | 70 ++++++++------------ level1/p10_pushBoxes/pushBoxes.rar | Bin 0 -> 39997 bytes level1/p10_pushBoxes/score.txt | 0 6 files changed, 92 insertions(+), 74 deletions(-) create mode 100644 level1/p10_pushBoxes/pushBoxes.rar create mode 100644 level1/p10_pushBoxes/score.txt diff --git a/level1/p01_runningLetter/runningLetter.c b/level1/p01_runningLetter/runningLetter.c index a0ac347f..d9d8b178 100644 --- a/level1/p01_runningLetter/runningLetter.c +++ b/level1/p01_runningLetter/runningLetter.c @@ -3,7 +3,7 @@ #include #include //constants -enum{ N = 1000 , sleep_time = 50}; +enum{ N = 1000 , SLEEP_TIME = 50}; char space[N]; int i; //func @@ -40,7 +40,7 @@ int main(int argc, char const *argv[]) DrawLine(width); /*Sleep a while, let the user watch.*/ - Sleep(sleep_time); + Sleep(SLEEP_TIME); } return 0; } diff --git a/level1/p09_maze/maze.c b/level1/p09_maze/maze.c index f6d7d94f..7aa09a83 100644 --- a/level1/p09_maze/maze.c +++ b/level1/p09_maze/maze.c @@ -3,6 +3,7 @@ #include #include #include +#define CHECK(r,c) r >= 0 && r < Height && c >= 0 && c < Width int c_r, c_c, ch, i, j,quitflag; enum {Width = 50, Height = 25}; char out[(Width+1) * (Height+1)]; @@ -31,7 +32,9 @@ int main() { interact(); } victory(); - if (quitflag) break; + if (quitflag) { + break; + } } printf("\nThanks for playing."); return 0; @@ -39,9 +42,16 @@ int main() { void init() { srand((unsigned)time(0)); c_r = c_c = 0; - if (!set) set = (int *)malloc(Height * Width * sizeof(int)); - for (i = 0; i < Height * Width; ++ i) set[i] = i; - if (!map) map = (int **)malloc(Height * sizeof(int *)); + if (!set) { + set = (int *)malloc(Height * Width * sizeof(int)); + } + for (i = 0; i < Height * Width; ++ i) { + set[i] = i; + } + if (!map) { + map = (int **)malloc(Height * sizeof(int *)); + } + for (i = 0; i < Height; ++ i) { map[i] = (int *)malloc(Width * sizeof(int)); } @@ -59,7 +69,7 @@ void dig() { int cnt = 0; for (i = 0; i < 4; ++ i) { int nr = r + dir[i][0], nc = c + dir[i][1]; - if (nr >= 0 && nr < Height && nc >= 0 && nc < Width && !map[nr][nc]) { + if (CHECK(nr,nc) && !map[nr][nc]) { cnt ++; } } @@ -68,7 +78,7 @@ void dig() { int i; for (i = 0; i < 4; ++ i) { int nr = r + dir[i][0], nc = c + dir[i][1]; - if (nr >= 0 && nr < Height && nc >= 0 && nc < Width && !map[nr][nc]) { + if (CHECK(nr,nc) && !map[nr][nc]) { int p_1 = find(r * Width + c); int p_2 = find(nr * Width + nc); set[p_2] = p_1; @@ -84,10 +94,18 @@ void showMap(int ** map) { for (j = 0; j < Width; ++ j) { - if (i == c_r && j == c_c) out[cnt++] = '*'; - else if (i == Height - 1 && j == Width - 1) out[cnt++] = '$'; - else if (map[i][j]) out[cnt++] = 'O'; - else out[cnt++] = ' '; + if (i == c_r && j == c_c) { + out[cnt++] = '*'; + } + else if (i == Height - 1 && j == Width - 1) { + out[cnt++] = '$'; + } + else if (map[i][j]) { + out[cnt++] = 'O'; + } + else { + out[cnt++] = ' '; + } } out[cnt++] = '\n'; } @@ -100,27 +118,26 @@ int find(int x) { } void interact() { if (_kbhit()) { - - ch = _getch(); - int n_r = c_r, n_c = c_c; - if (ch == 75 || ch == 97) { - n_c -= 1; - } - if (ch == 72 || ch == 119) { - n_r -= 1; - } - if (ch == 77 || ch == 100) { - n_c += 1; - } - if (ch == 80 || ch == 115) { - n_r += 1; - } - if (n_r >= 0 && n_r < Height && n_c >= 0 && n_c < Width && !map[n_r][n_c]) { - c_r = n_r, c_c = n_c; + ch = _getch(); + int n_r = c_r, n_c = c_c; + if (ch == 75 || ch == 97) { + n_c -= 1; + } + if (ch == 72 || ch == 119) { + n_r -= 1; + } + if (ch == 77 || ch == 100) { + n_c += 1; + } + if (ch == 80 || ch == 115) { + n_r += 1; + } + if (CHECK(n_r,n_c) && !map[n_r][n_c]) { + c_r = n_r, c_c = n_c; + } + system("cls"); + showMap(map); } - system("cls"); - showMap(map); -} } void victory() { quitflag = 0; @@ -133,7 +150,8 @@ void victory() { quitflag = 1; break; } - else if (ch == 114) break; + else if (ch == 114) + break; system("cls"); printf("You win!\nEnter q to quit and r to restart."); } diff --git a/level1/p10_pushBoxes/maps.txt b/level1/p10_pushBoxes/maps.txt index c73db96a..c63faa44 100644 --- a/level1/p10_pushBoxes/maps.txt +++ b/level1/p10_pushBoxes/maps.txt @@ -1,3 +1,15 @@ +OOOOOOOOOOOOOOO +O O $ O O +O O O +O O OO +OO O###O O +O$$O$# * #$O$$O +O O###O OO +OO O O O +O O O +O O $ O O +OOOOOOOOOOOOOOO +& OOOOOOO O $ O O # O diff --git a/level1/p10_pushBoxes/pushBoxes.c b/level1/p10_pushBoxes/pushBoxes.c index f23f0f6f..2a481eaa 100644 --- a/level1/p10_pushBoxes/pushBoxes.c +++ b/level1/p10_pushBoxes/pushBoxes.c @@ -2,6 +2,7 @@ #include #include #include +#define CHECK enum {MapNum = 10,MaxNum = 100, WinNum = 4}; enum {Space, Wall, Box, Dest, BoxOverDest, P, LineBreak, BoxInDest, PInDest}; int *** maps = NULL; @@ -9,17 +10,11 @@ char ch; int Steps = 0, quitflag = 0; int i, j; int cur_map = 0; -struct map +struct point { int row; int col; -}mapInfo[MapNum]; -struct player -{ - int row; - int col; -}player; -// void swap(char *a,char *b); +}player, mapInfo[MapNum]; void Move(int n_r,int n_c); int NotOut(int rr, int cc); int char2int(char c); @@ -163,14 +158,12 @@ int char2int(char c) { else if (c == '\n') return LineBreak; } char int2char(int t) { - if (t == P) return '*'; + if (t == P || t == PInDest) return '*'; else if (t == Space) return ' '; else if (t == Wall) return 'O'; - else if (t == Box) return '#'; + else if (t == Box || t == BoxInDest) return '#'; else if (t == Dest) return '$'; else if (t == LineBreak) return '\n'; - else if (t == BoxInDest) return '#'; - else if (t == PInDest) return '*'; } int victory() { for (i = 0; i < mapInfo[cur_map].row; ++ i) { @@ -190,55 +183,50 @@ void restart() { Update(); } void Move(int n_r,int n_c) { - //前方空地 - if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == Space) { + if (!NotOut(n_r,n_c)) return; + //前方空地 + if (maps[cur_map][n_r][n_c] == Space) { maps[cur_map][n_r][n_c] = P; - maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; player.row = n_r, player.col = n_c; } //前方归位点 - if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == Dest) { + if (maps[cur_map][n_r][n_c] == Dest) { maps[cur_map][n_r][n_c] = PInDest; maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; player.row = n_r, player.col = n_c; } //前方归位箱 - if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == BoxInDest) { - int b_n_r = n_r + n_r - player.row; - int b_n_c = n_c + n_c - player.col; - //箱子前方空地 - if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Space) { - maps[cur_map][n_r][n_c] = PInDest; - maps[cur_map][b_n_r][b_n_c] = Box; - maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; - player.row = n_r, player.col = n_c; - } - //箱子前方归位点 - else if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Dest) { - maps[cur_map][n_r][n_c] = PInDest; - maps[cur_map][b_n_r][b_n_c] = BoxInDest; - maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; - player.row = n_r, player.col = n_c; - } + if (maps[cur_map][n_r][n_c] == BoxInDest) { + pushBox(BoxInDest,n_r,n_c); } //前方箱子 - if (NotOut(n_r,n_c) && maps[cur_map][n_r][n_c] == Box) { - int b_n_r = n_r + n_r - player.row; - int b_n_c = n_c + n_c - player.col; + if (maps[cur_map][n_r][n_c] == Box) { + pushBox(Box,n_r,n_c); + } +} +void pushBox(int BoxNowState, int n_r, int n_c) { + int b_n_r = n_r + n_r - player.row; + int b_n_c = n_c + n_c - player.col; + if (!NotOut(b_n_r,b_n_c)) return; //箱子前方空地 - if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Space) { - maps[cur_map][n_r][n_c] = P; + if (maps[cur_map][b_n_r][b_n_c] == Space) { + if (BoxNowState == BoxInDest) + maps[cur_map][n_r][n_c] = PInDest; + else if (BoxNowState == Box) + maps[cur_map][n_r][n_c] = P; maps[cur_map][b_n_r][b_n_c] = Box; maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; player.row = n_r, player.col = n_c; } //箱子前方归位点 - else if (NotOut(b_n_r,b_n_c) && maps[cur_map][b_n_r][b_n_c] == Dest) { - maps[cur_map][n_r][n_c] = P; + else if (maps[cur_map][b_n_r][b_n_c] == Dest) { + if (BoxNowState == BoxInDest) + maps[cur_map][n_r][n_c] = PInDest; + else if (BoxNowState == Box) + maps[cur_map][n_r][n_c] = P; maps[cur_map][b_n_r][b_n_c] = BoxInDest; maps[cur_map][player.row][player.col] = maps[cur_map][player.row][player.col] == PInDest ? Dest : Space; player.row = n_r, player.col = n_c; } - } } \ No newline at end of file diff --git a/level1/p10_pushBoxes/pushBoxes.rar b/level1/p10_pushBoxes/pushBoxes.rar new file mode 100644 index 0000000000000000000000000000000000000000..3683785d93a2c007c45bf12c2a80c53109303908 GIT binary patch literal 39997 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 nuzIk`RvATK-^i?_56 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