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