diff --git a/.idea/c2018.iml b/.idea/c2018.iml new file mode 100644 index 00000000..f08604bb --- /dev/null +++ b/.idea/c2018.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..30aa626c --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..79b3c948 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..07eb9455 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..7314f846 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1521505630921 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/level1/p01_runningLetter/runningLetter.c b/level1/p01_runningLetter/runningLetter.c new file mode 100644 index 00000000..4879c478 --- /dev/null +++ b/level1/p01_runningLetter/runningLetter.c @@ -0,0 +1,43 @@ +#include +#include + +#define WINDOW_WIDTH 76 + +void move(int dir) +{ + int i,j; + for(i=1;i<=WINDOW_WIDTH;i++) + { + Sleep(1); + system("cls"); + if(dir==1) + { + for(j=1;j<=i;j++) + { + printf(" "); + } + printf("test"); + } + if(dir==-1) + { + for(j=WINDOW_WIDTH-i;j>=1;j--) + { + printf(" "); + } + printf("test"); + } + + } +} +int main() +{ + printf("test"); + for(;;) + { + move(1); + move(-1); + } + return 0; +} + + diff --git a/level1/p02_isPrime/isPrime.c b/level1/p02_isPrime/isPrime.c new file mode 100644 index 00000000..4b1c270d --- /dev/null +++ b/level1/p02_isPrime/isPrime.c @@ -0,0 +1,31 @@ +#include + +int n,i; +int main() +{ + scanf("%d", &n); + if(n==1) + { + printf("1 is not a prime number nor a composite number.\n"); + exit(0); + } + if(n<=0) + { + printf("Please input a positive integer!"); + scanf("%d", &n); + } + for(i=2;i*i<=n;i++) + { + if(n%i==0) + { + printf("%d is not a prime.\n", n); + exit(0); + } + } + printf("%d is a prime.\n", n); + + return 0; +} + + + diff --git a/level1/p03_Diophantus/Diophantus.c b/level1/p03_Diophantus/Diophantus.c new file mode 100644 index 00000000..792cb12f --- /dev/null +++ b/level1/p03_Diophantus/Diophantus.c @@ -0,0 +1,17 @@ +#include +#include + +#define eps 1e-9 + +double x; +int main() +{ + //x=1/6x+1/12x+1/7x+5+1/2x+4 + for(x=1;x<=200;x++) + { + if(fabs(x/6+x/12+x/7+5+x/2+4-x) + +int n,i; +int main() +{ + for(i=100;i<=999;i++) + { + int a=i/100, b=(i/10)%10, c=i%10; + if(a*a*a+b*b*b+c*c*c==i) + printf("%d\n", i); + } + + return 0; +} + + + diff --git a/level1/p05_allPrimes/allPrimes.c b/level1/p05_allPrimes/allPrimes.c new file mode 100644 index 00000000..7de466b7 --- /dev/null +++ b/level1/p05_allPrimes/allPrimes.c @@ -0,0 +1,23 @@ +#include +#include + +#define MAXN 1000 +int prime[MAXN+1],i,j; +int main() +{ + double begin=clock(); + for(i=2;i<=MAXN;i++) + { + if(!prime[i]) prime[++prime[0]]=i; + for(j=1;j<=prime[0] && prime[j]<=MAXN/i;j++) + { + prime[prime[j]*i]=1; + if(i%prime[j]==0) break; + } + } + for(i=1;i<=prime[0];i++) + printf("%d\n", prime[i]); + double end=clock(); + printf("%f\n", (end-begin)/CLOCKS_PER_SEC); + return 0; +} diff --git a/level1/p06_Goldbach/Goldbach.c b/level1/p06_Goldbach/Goldbach.c new file mode 100644 index 00000000..2870bd37 --- /dev/null +++ b/level1/p06_Goldbach/Goldbach.c @@ -0,0 +1,33 @@ +#include + +#define MAXN 100 + +int prime[MAXN+1],i,j,isPrime[MAXN+1]; +int main() +{ + for(i=2;i<=MAXN;i++) + { + if(!prime[i]) prime[++prime[0]]=i; + for(j=1;j<=prime[0] && prime[j]<=MAXN/i;j++) + { + prime[prime[j]*i]=1; + if(i%prime[j]==0) break; + } + } + for(i=1;i<=prime[0];i++) + { + isPrime[prime[i]]=1; + } + for(i=4;i<=MAXN;i+=2) + { + for(j=1;prime[j] + +int key,mode; +char c; +int main() +{ + printf("Please input 1 if you want to encode a string or input 2 if you want to decode a string.\n"); + scanf("%d", &mode); + while(mode!=1 && mode!=2) + { + printf("ERROR!\n"); + scanf("%d",&mode); + } + printf("Please input the key:"); + scanf("%d", &key); + if(mode==1) + { + getchar(); + printf("The encoded string is "); + while((c=getchar())!='\n') + { + printf("%c",c+key); + } + + } + if(mode==2) + { + getchar(); + printf("The decoded string is "); + while((c=getchar())!='\n') + { + printf("%c",c-key); + } + } +} diff --git a/level1/p08_hanoi/hanoi.c b/level1/p08_hanoi/hanoi.c new file mode 100644 index 00000000..a3d2ac26 --- /dev/null +++ b/level1/p08_hanoi/hanoi.c @@ -0,0 +1,20 @@ +#include + +int n; +void move(int n,char a,char b,char c) +{ + if(n==1) + printf("%c->%c\n",a,c); + else + { + move(n-1,a,c,b); + printf("%c->%c\n",a,c); + move(n-1,b,a,c); + } +} +int main() +{ + scanf("%d",&n); + move(n,'a','b','c'); + return 0; +} diff --git a/level1/p09_maze/.vscode/settings.json b/level1/p09_maze/.vscode/settings.json new file mode 100644 index 00000000..9deab0ab --- /dev/null +++ b/level1/p09_maze/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "stdlib.h": "c" + } +} \ No newline at end of file diff --git a/level1/p09_maze/README.md b/level1/p09_maze/README.md index eaa105de..2777c814 100755 --- a/level1/p09_maze/README.md +++ b/level1/p09_maze/README.md @@ -4,4 +4,6 @@ 1. 在控制台上显示一个迷宫,包括:墙、玩家、出口等; 2. 通过上下左右键,控制玩家行走; -3. 当玩家到达出口,则显示玩家赢得了游戏; \ No newline at end of file +3. 当玩家到达出口,则显示玩家赢得了游戏; + + diff --git a/level1/p09_maze/maze.c b/level1/p09_maze/maze.c new file mode 100755 index 00000000..87555865 --- /dev/null +++ b/level1/p09_maze/maze.c @@ -0,0 +1,157 @@ +#include +#include +#include +//#include +#define N 3000 +int n,m,i,j,r,cur,curX,curY,tot,curYY,dir,tot; +char map[N*2][N*2],mov,t; +int path[N*2][2],vis[N][N]; +int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; +int ok=0; +int isBlank(int x, int y) //if there is a land near a land +{ + for(int i=0;i<=3;i++) + { + int xx = x+dx[i]*2; + int yy = y+dy[i]*2; + if(xx<=n && yy<=m && xx>=1 && yy>=1 && map[xx][yy]==' ' && vis[xx][yy]==0) + return 1; + } + return 0; +} +int test(int x, int y, int r) // if a tile near a land is a wall +{ + int xx = x+dx[r]*2; + int yy = y+dy[r]*2; + if(xx<=n && yy<=m && xx>=1 && yy>=1 && map[xx][yy]==' ' && vis[xx][yy]==0) + return 1; + else + return 0; +} +void print() +{ + for(int i=0;i<=n+1;i++) + { + for(int j=0;j<=m;j++) + printf("%c",map[i][j]); + printf("%c\n",map[i][m+1]); + } +} +int main(){ + srand((int)time(0)); + printf("Input n and m (the size of maze, which is an odd number)):\n"); + scanf("%d %d",&n,&m); + getchar(); + //n=55; + //m=135; + for(i=0;i<=n+1;i++) + for(j=0;j<=m+1;j++) + map[i][j] = '#'; + for(i=1;i<=n;i+=2) + for(j=1;j<=m;j+=2) + map[i][j] = ' '; + tot = ((n+1)/2)*((m+1)/2); + cur = 1; + curX = (int)(n); + curY = (int)(m/2); + if (curY%2==0) curY++; + + map[0][m] = ' '; + map[n+1][1] = '.'; + path[cur][0] = curX; + path[cur][1] = curY; + + while(cur<=tot) + { + if(isBlank(curX, curY)) + { + ok = 0; + while(!ok) + { + r = (int)(4.0*rand()/(RAND_MAX)); + if(test(curX, curY, r)) + { + ok = 1; + } + } + cur++; + curX += dx[r]; + curY += dy[r]; + map[curX][curY] = ' '; + vis[curX][curY] = 1; + curX += dx[r]; + curY += dy[r]; + vis[curX][curY] = 1; + path[cur][0] = curX; + path[cur][1] = curY; + } + else + { + for(i=cur;i>=1;i--) + if(isBlank(path[i][0],path[i][1])) + break; + curX = path[i][0]; + curY = path[i][1]; + ok = 0; + while(!ok) + { + r = (int)(4.0*rand()/(RAND_MAX)); + if(test(curX, curY, r)) + { + ok = 1; + } + + } + cur++; + curX += dx[r]; + curY += dy[r]; + map[curX][curY] = ' '; + vis[curX][curY] = 1; + curX += dx[r]; + curY += dy[r]; + vis[curX][curY] = 1; + path[cur][0] = curX; + path[cur][1] = curY; + } + } + + printf("Start the game!\n"); + printf("Please input W/A/S/D to move:\n"); + + curX = (int)(n); + curY = 1; + map[0][m] = ' '; + map[n+1][1] = '.'; + curX++; + print(); + tot = 0; + while(!(curX == 0 && curY==m)) + { + scanf("%c",&mov); + getchar(); + if(mov=='w') dir=0; + if(mov=='d') dir=1; + if(mov=='s') dir=2; + if(mov=='a') dir=3; + curX += dx[dir]; + curY += dy[dir]; + tot++; + if(map[curX][curY]=='#') + { + printf("Error!Please choose another direction:\n"); + curX -= dx[dir]; + curY -= dy[dir]; + continue; + } + else + { + map[curX][curY] = '.'; + map[curX-dx[dir]][curY-dy[dir]] = ' '; + } + system("clear"); + print(); + } + printf("You win!\n"); + printf("Your sum of steps is %d.\n",tot); + return 0; +} diff --git a/level1/p10_pushBoxes/pushBoxes.c b/level1/p10_pushBoxes/pushBoxes.c new file mode 100644 index 00000000..e2fd7cf6 --- /dev/null +++ b/level1/p10_pushBoxes/pushBoxes.c @@ -0,0 +1,230 @@ +#include +#include +#include +//#include +#define N 3000 +int n,m,i,j,r,cur,curX,curY,tot,curXX,curYY,dir,tot; +char map[N*2][N*2],map2[N*4][N*4],mov; +int path[N*2][2],vis[N][N],tmp,rx,ry,cnt; +int dx[8]={-1,0,1,0,-1,1,1,-1},dy[8]={0,1,0,-1,1,1,-1,-1}; +int ok=0; +int isBlank(int x, int y) //if there is a land near a land +{ + for(int i=0;i<=3;i++) + { + int xx = x+dx[i]*2; + int yy = y+dy[i]*2; + if(xx<=n && yy<=m && xx>=1 && yy>=1 && map[xx][yy]==' ' && vis[xx][yy]==0) + return 1; + } + return 0; +} +int test(int x, int y, int r) // if a tile near a land is a wall +{ + int xx = x+dx[r]*2; + int yy = y+dy[r]*2; + if(xx<=n && yy<=m && xx>=1 && yy>=1 && map[xx][yy]==' ' && vis[xx][yy]==0) + return 1; + else + return 0; +} +void print() +{ + for(int i=0;i<=n+1;i++) + { + for(int j=0;j<=m;j++) + printf("%c",map[i][j]); + printf("%c\n",map[i][m+1]); + } +} +void print2() +{ + for(int i=0;i<=2*n+1;i++) + { + for(int j=0;j<=2*m;j++) + printf("%c",map2[i][j]); + printf("%c\n",map2[i][2*m+1]); + } +} +int count(int x, int y) +{ + int sum = 0; + for(i=0;i<=7;i++) + { + int xx = x+dx[i]; + int yy = y+dy[i]; + if(map2[xx][yy]=='#' || map2[xx][yy]=='*') sum++; + } + return sum; +} +int main(){ + srand((int)time(0)); + printf("Input n and m (the size of maze, which is an odd number)):\n"); + scanf("%d %d",&n,&m); + getchar(); + //n=55; + //m=135; + for(i=0;i<=n+1;i++) + for(j=0;j<=m+1;j++) + map[i][j] = '#'; + for(i=0;i<=2*(n+1);i++) + for(j=0;j<=2*(m+1);j++) + map2[i][j] = '#'; + for(i=1;i<=n;i+=2) + for(j=1;j<=m;j+=2) + map[i][j] = ' '; + tot = ((n+1)/2)*((m+1)/2); + cur = 1; + curX = (int)(n); + curY = (int)(m/2); + if (curY%2==0) curY++; + + map[0][m] = ' '; + map[n+1][1] = '.'; + path[cur][0] = curX; + path[cur][1] = curY; + + while(cur<=tot) + { + if(isBlank(curX, curY)) + { + ok = 0; + while(!ok) + { + r = (int)(4.0*rand()/(RAND_MAX)); + if(test(curX, curY, r)) + { + ok = 1; + } + } + cur++; + curX += dx[r]; + curY += dy[r]; + map[curX][curY] = ' '; + vis[curX][curY] = 1; + curX += dx[r]; + curY += dy[r]; + vis[curX][curY] = 1; + path[cur][0] = curX; + path[cur][1] = curY; + } + else + { + for(i=cur;i>=1;i--) + if(isBlank(path[i][0],path[i][1])) + break; + curX = path[i][0]; + curY = path[i][1]; + ok = 0; + while(!ok) + { + r = (int)(4.0*rand()/(RAND_MAX)); + if(test(curX, curY, r)) + { + ok = 1; + } + } + cur++; + curX += dx[r]; + curY += dy[r]; + map[curX][curY] = ' '; + vis[curX][curY] = 1; + curX += dx[r]; + curY += dy[r]; + vis[curX][curY] = 1; + path[cur][0] = curX; + path[cur][1] = curY; + } + } + + printf("Start the game!\n"); + printf("Please input W/A/S/D to move:\n"); + + map[0][m] = ' '; + map[n+1][1] = '.'; + print(); + + printf("\n"); + for(i=1;i<=n+1;i++) + for(j=1;j<=m+1;j++) + { + tmp = map[i][j]; + map2[2*i][2*j] = tmp; + map2[2*i-1][2*j] = tmp; + map2[2*i][2*j-1] = tmp; + map2[2*i-1][2*j-1] = tmp; + } + + curX = 2*n+1; + curY = 1; + map2[curX][curY] = '.'; + map2[curX][curY+1] = '#'; + map2[0][2*m] = ' '; + cnt = 0; + while(cnt<=2) + { + rx = (int)((double)(2*n)*rand()/(RAND_MAX))+1; + ry = (int)((double)(2*m)*rand()/(RAND_MAX))+1; + if(map2[rx][ry] == ' ' && count(rx,ry)<=2) + { + cnt++; + map2[rx][ry] = '*'; + } + } + cnt = 0; + tot = 0; + print2(); + while(cnt<=2) + { + for(;;) + { + scanf("%c",&mov); + getchar(); + if(mov=='w') dir=0; + if(mov=='d') dir=1; + if(mov=='s') dir=2; + if(mov=='a') dir=3; + tot++; + curX += dx[dir]; + curY += dy[dir]; + if(map2[curX][curY]=='#') + { + printf("Error!Please choose another direction:\n"); + curX -= dx[dir]; + curY -= dy[dir]; + continue; + } + else if(map2[curX][curY]==' ') + { + map2[curX][curY] = '.'; + map2[curX-dx[dir]][curY-dy[dir]] = ' '; + } + else if(map2[curX][curY]=='*') + { + if(map2[curX+dx[dir]][curY+dy[dir]] == '#' || map2[curX+dx[dir]][curY+dy[dir]] == '*') + { + printf("Error!Please choose another direction:\n"); + curX -= dx[dir]; + curY -= dy[dir]; + continue; + } + map2[curX+dx[dir]][curY+dy[dir]] = '*'; + map2[curX][curY] = '.'; + map2[curX-dx[dir]][curY-dy[dir]] = ' '; + } + if(map2[0][2*m] == '*') + { + cnt++; + map2[0][2*m] = ' '; + printf("You've completed %d box\n",cnt); + break; + } + system("clear"); + print2(); + printf("Step:%d\n",tot); + } + } + printf("You win!\n"); + printf("Your sum of steps is %d\n",tot); + return 0; +} diff --git a/level1/p11_linkedList/linkedList.c b/level1/p11_linkedList/linkedList.c new file mode 100644 index 00000000..a7cc3264 --- /dev/null +++ b/level1/p11_linkedList/linkedList.c @@ -0,0 +1,37 @@ +#include +#define N 10000 +struct node +{ + int v,next; +}d[N+1]; +int head,i,flag=0,n; +void reverse(){ + int tmp=0,v=0; + for(int i=head;i;i=d[i].next) + { + d[v].next = tmp; + tmp = v; + v = i; + } + d[v].next = tmp; + head = v; +} +int main(){ + scanf("%d", &n); + for(i=1;i<=n;i++) + d[i].v = i; + for(i=1;i +#include +#include + +struct goods +{ + char name[20]; + int num; +}list[10010],t; +int tot,mark,n,i,j,cnt; +char cmd[10]; + +int cmp(char*s1, char*s2) +{ + if(strlen(s1)!=strlen(s2)) + return 0; + for(int i=strlen(s1)-1;i>=0;i--) + if(s1[i]!=s2[i]) + return 0; + return 1; +} + +void showGoodsList() +{ + system("clear"); + printf("Goods list:\n"); + printf("%10s", "GoodsName"); + printf("%10s", "GoodsNum"); + printf("\n"); + for(int i=1;i<=tot;i++) + { + printf("%10s", list[i].name); + printf("%10d ",list[i].num); + printf("\n"); + } + return; +} + +int main() +{ + FILE *file = fopen("goodsList","r"); + while(!feof(file)) + { + tot++; + fscanf(file,"%s %d",list[tot].name,&list[tot].num); + } + while(tot && list[tot].num) + tot--; + tot--; + fclose(file); + + for(;;) + { + printf("Please input your order:\n"); + printf("2:Show the current goods list, 3:Import goods, 4:Export goods, 5:Save the data and exit.\n"); + printf("You may enter the command like this: 2 / 3 goodsName goodsNum / 4 goodsName goodsNum / 5.\n"); + printf("Please input you command:\n"); + + scanf("%s",cmd); + if(cmd[0] == '2') + { + showGoodsList(); + continue; + } + else if(cmd[0] == '3') + { + scanf("%s %d", t.name, &t.num); + mark = tot+1; + for(i=1;i<=tot;i++) + if(cmp(t.name,list[i].name)) + { + mark = i; + break; + } + t.num += list[mark].num; + list[mark] = t; + if(mark>tot) tot=mark; + } + else if(cmd[0] == '4') + { + scanf("%s %d", t.name, &t.num); + mark=0; + for(i=1;i<=tot;i++) + if(cmp(t.name,list[i].name)) + { + mark=i; + break; + } + if(!mark || list[mark].num