-
个人简介
确かに忍の世界で、ルールやオキテを破る奴はクズ呼ばわりされる。けどな…仲间を大切にしない奴はそれ以上のクズだ!同じクズなら俺は仲间を助ける! (好奇自己去翻译)
扫雷小游戏:
#include<cstdio> #include<cstring> #include<algorithm> #include<conio.h> #include<windows.h> #include<cstdlib> #include<ctime> using namespace std;
#define MAXN 35 #define MIDX 10 #define MIDY 40 #define CG 25 #define CK 80
int G,K,Lnum,Wnum;//G为地图高,K为地图,Lnum为地图中的雷数,Wnum为剩余的小旗数 int nx,ny;//现在光标所在的位置 bool QR=0,Lose=0,is_flag_true[MAXN][MAXN];//QR为确认模式是否打开,Lose为是否输,第三个是这个位置上的旗是否放对 char map[MAXN][MAXN],tmap[MAXN][MAXN];//第一个是只有雷和空地的地图,第二个是玩家能看到的地图 int map1[MAXN][MAXN],mapc[MAXN][MAXN];//map1为数字的地图,其中0代表空地,-1为雷,1-8为周围雷的个数 //mapc为当前格子的颜色 int col[10]={240,249,242,252,241,244,243,240,248};//col[i]表示windows扫雷中i的颜色,col[0]为空格的颜色 int d[10][4]={{0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//8个方向 bool ZB;//作弊是否打开
/各种函数/ void color(int);//颜色 void gto(int,int);//光标位置 void make();//制作随机地图 void print();//打印地图等 bool check(int,int);//判断坐标是否合法 bool is_win();//判断是否赢 bool is_lose();//是否输 void dfs(int,int);//用深搜来打开方块 void st(int,int);//试探,即windows扫雷中的左右键同时按 void flag(int,int);//小旗 void bj(int,int);//标记 void swt();//确认模式 void again();//重新开始 void zb();//作弊模式 void mainmain();//主函数 void print_real_map();//打印最终的地图 void begin();//各种操作
int main() { mainmain(); }
void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);} void gto(int x,int y) { COORD pos;pos.X=y;pos.Y=x; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); }
void make() { for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) map[i][j]='#';//初始化 for(int i=1;i<=Lnum;i++) { int x=rand()%G+1,y=rand()%K+1; while(map[x][y]'O') x=rand()%G+1,y=rand()%K+1; map[x][y]='O'; }//随机放雷 for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) { if(map[i][j]'O')map1[i][j]=-1,mapc[i][j]=240;//如果是雷 else { for(int k=1;k<=8;k++) if(map[i+d[k][0]][j+d[k][1]]=='O') map1[i][j]++;//计算周围雷的个数 mapc[i][j]=col[map1[i][j]];//根据格子上的数设置颜色 } } for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) if(mapc[i][j]==0)//空地 mapc[i][j]=240; } void print() { system("cls"); gto(0,MIDY-4); color(233); printf("扫雷"); color(240); gto(1,MIDY); for(int i=2;i<=G+1;i++) { gto(i,0); for(int j=1;j<=K;j++) printf("#"),tmap[i-1][j]='#';//初始化玩家所看到的地图 }
gto(2,0); nx=2,ny=0; color(15); printf("@"); color(15); gto(2,2*K+5);printf("-----规则-----"); gto(3,2*K+5);printf("wasd:选择位置"); gto(4,2*K+5);printf("空格:打开"); gto(5,2*K+5);printf("1键:试探周围8个方块,如果其中有雷则不会打开,无"); gto(6,2*K+5);printf(" 雷或旗帜标对了则会将周围无雷的位置打开,"); gto(7,2*K+5);printf(" 如果试探时周围有标错的旗帜,则会游戏失败"); gto(8,2*K+5);printf(" 必须额外确认一次,以便查看周围被试探的区域"); gto(9,2*K+5);printf("2键:放置/取消小旗(F)"); gto(10,2*K+5);printf("3键:放置/取消标记(?)"); gto(11,2*K+5);printf("4键:打开/关闭确认模式,即每次操作需再按一次确认"); gto(12,2*K+5);printf("5键:打开/关闭作弊模式,即显示原本地图"); gto(13,2*K+5);printf("0键:重新开始");//打印规则 gto(G+4,0);printf("-----操作提示-----\n"); printf("请选择方块进行操作"); gto(1,2*K+10);color(12);printf("剩余小旗数:%d",Wnum=Lnum);
}
bool check(int x,int y){return y>=0&&y<K&&x>=2&&x<G+2;} //因为地图是从2行0列开始打的,而地图是从1行1列开始存的,所以gto(x,y)走到的是map[x-1][y+1] bool is_win() { int cnt=0; for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) if(map[i][j]'#'&&map1[i][j]-1) cnt++; if(cntLnum) return 1; //所有没被打开的方块都是雷=>胜利 for(int i=1;i<=G;i++) for(int j=1;j<=K;j++) if((tmap[i][j]!='F'&&map1[i][j]-1)||(tmap[i][j]=='F'&&map1[i][j]!=-1)) return 0; return 1; //所有雷都标有旗 } bool is_lose(){return Lose;}
void dfs(int x,int y) { if(map1[x-1][y+1]>0)//只要边界全部是数字就return { gto(x,y),color(mapc[x-1][y+1]),printf("%d",map1[x-1][y+1]); tmap[x-1][y+1]=map1[x-1][y+1]+'0'; return; } gto(x,y);color(255); tmap[x-1][y+1]=' '; printf(" ");//因为下面判断了雷,上面判断了数字,这里就一定是空地 for(int i=1;i<=8;i++) { int xx=x+d[i][0]-1,yy=y+d[i][1]+1;//这里的xx和yy是在map中的,而不是gto中的 if(check(xx+1,yy-1)&&tmap[xx][yy]'#'&&map1[xx][yy]!=-1)//所以check和dfs的参数要变化 dfs(xx+1,yy-1); } } void st(int x,int y) { for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)) { gto(xx,yy); if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]-128);//减去128使周围的8个格子的背景颜色变为灰色 else color(112);//这里特判一下'#',应该可以不用 printf("%c",tmap[xx-1][yy+1]); } } gto(G+5,0),color(15),printf("请确认 "); //试探必须额外确认一次,规则上有说 char c=getch(); if(c'1') { for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)) if(tmap[xx-1][yy+1]'F'&&map1[xx-1][yy+1]!=-1)//试探时有格子的小旗标错了=>失败 { Lose=1; return; } } for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)) if(map1[xx-1][yy+1]-1&&tmap[xx-1][yy+1]!='F')//试探是有格子为雷=>取消打开 return; } for(int i=1;i<=8;i++) { int xx=x+d[i][0],yy=y+d[i][1]; if(check(xx,yy)&&tmap[xx-1][yy+1]'#')//打开周围8个格子 dfs(xx,yy); } } } void flag(int x,int y) { x-=1,y+=1; if(tmap[x][y]'F')//原本为小旗=>取消小旗 { tmap[x][y]='#';mapc[x][y]=240; gto(x+1,y-1),color(240),printf("#"); Wnum++;//更新小旗数 } else//否则就放置小旗 { is_flag_true[x][y]=map1[x][y]-1;//判断小旗是否放对 tmap[x][y]='F';mapc[x][y]=253; gto(x+1,y-1),color(253),printf("F"); Wnum--;//更新小旗数 } gto(1,2K+10);color(12);printf("剩余小旗数: "); gto(1,2K+22);printf("%d",Wnum);//更新小旗数 } void bj(int x,int y)//和放小旗差不多,只是不用更新is_flag_true { x-=1,y+=1; if(tmap[x][y]'?') { gto(x+1,y-1),color(240),printf("#"); tmap[x][y]='#';mapc[x][y]=240; } else { if(tmap[x][y]'F')//如果原本这个位置上是小旗,而你把它变为了标记,就要更新小旗数 { Wnum++; gto(1,2K+10);color(12);printf("剩余小旗数: "); gto(1,2K+22);printf("%d",Wnum); } gto(x+1,y-1),color(240),printf("?"); tmap[x][y]='?';mapc[x][y]=240; } } void swt(){QR=!QR;} void zb() { if(ZB)//如果本来作弊打开了就把作弊地图清除 { for(int i=1;i<=G;i++) { gto(i+1,K+2); for(int j=1;j<=K;j++) color(15),printf(" "); } ZB=0; } else//否则打印作弊地图 { for(int i=1;i<=G;i++) { gto(i+1,K+2); for(int j=1;j<=K;j++) { color(mapc[i][j]); if(map1[i][j]-1) printf("O"); else if(map1[i][j]>0) printf("%d",map1[i][j]); else printf(" "); } } ZB=1; } } void again() { G=K=Lnum=nx=ny=Lose=ZB=0; QR=0; memset(is_flag_true,0,sizeof(is_flag_true)); memset(map,0,sizeof(map)); memset(tmap,0,sizeof(tmap)); memset(map1,0,sizeof(map1)); memset(mapc,0,sizeof(mapc)); color(15); system("cls");//初始化 mainmain(); }
void begin()//各种操作 { char c=getch(); gto(G+5,0),color(15),printf("请选择方块进行操作"); color(240); if(c=='w'&&check(nx-1,ny)) { gto(nx,ny); if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]' ') color(mapc[nx-1][ny+1]); printf("%c",tmap[nx-1][ny+1]); gto(nx-=1,ny);color(15);printf("@"); } else if(c's'&&check(nx+1,ny)) { gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]); gto(nx+=1,ny);color(15);printf("@"); } else if(c'a'&&check(nx,ny-1)) { gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]); gto(nx,ny-=1);color(15);printf("@"); } else if(c'd'&&check(nx,ny+1)) { gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]); gto(nx,ny+=1);color(15);printf("@"); } //上下左右移动 else { if(c' '&&(!(tmap[nx-1][ny+1]<='9'&&tmap[nx-1][ny+1]>='0'))&&tmap[nx-1][ny+1]!='F') { mapc[nx-1][ny+1]=col[map1[nx-1][ny+1]];//如果本来放了标记,mapc[nx-1][ny+1]的颜色为黑色,在打开时里面的颜色却不一定是黑色 if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()' ') { if(map1[nx-1][ny+1]-1) {Lose=1;return;} dfs(nx,ny); } } else { if(map1[nx-1][ny+1]-1) {Lose=1;return;} dfs(nx,ny); } } else if(c'1') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()'1') st(nx,ny); } else st(nx,ny); for(int i=1;i<=8;i++) { int xx=nx+d[i][0],yy=ny+d[i][1]; if(check(xx,yy)) { gto(xx,yy); if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]); else color(240); printf("%c",tmap[xx-1][yy+1]); } } } else if(c'2'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1')) { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()'2') flag(nx,ny); } else flag(nx,ny); } else if(c'3'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1')) { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()'3') bj(nx,ny); } else bj(nx,ny); } else if(c'4') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()'4') swt(); } else swt(); } else if(c'5') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()'5') zb(); } else zb(); } else if(c'0') { if(QR) { gto(G+5,0),color(15),printf("请确认 "); if(getch()=='0') again(); } else again(); } } }
void mainmain() { system("mode con cols=120 lines=35");//设置窗口大小 srand((unsigned)time(NULL)); int mode; printf("1.初级\n2.中级\n3.高级\n4.自定义\n"); scanf("%d",&mode);if(mode>4) mode=4; if(mode1) G=9,K=9,Lnum=10; else if(mode2) G=16,K=16,Lnum=40; else if(mode3) G=16,K=30,Lnum=99;//三种等级的参数 else { printf("请输入雷区高度:");scanf("%d",&G); printf("请输入雷区宽度:");scanf("%d",&K); printf("请输入雷个数(建议不超过总大小的三分之一):");scanf("%d",&Lnum); if(G>24) G=24;if(K>30) K=30; if(G<9) G=9;if(K<9) K=9; if(Lnum<10) Lnum=10;if(Lnum>GK9/10) Lnum=GK9/10; //控制参数的范围,最后一个if是雷的数量不超过地图大小的9/10 } make(); print(); while(1) { begin(); bool f1=is_win(),f2=is_lose(); if(f1||f2) { gto(0,0); if(f1) color(202),gto(0,0),printf("你 赢 了!!是否重来?(y/n)"); if(f2) color(137),gto(0,0),printf("你 输 了!!是否重来?(y/n)");//输赢 print_real_map(); char c=getch(); if(c'y'||c=='Y') again(); else { color(15); system("cls"); gto(MIDX,MIDY-5); printf("欢迎下次再来"); return; } } } } void print_real_map() { color(240); for(int i=1;i<=G;i++) { gto(i+1,0); for(int j=1;j<=K;j++) { if(tmap[i][j]=='F'&&is_flag_true[i][j]0)//如果旗标错了显示红色的X color(252),printf("X"); else if(map1[i][j]-1)//雷为黑色O color(240),printf("O"); else if(map1[i][j]==0)//空 color(240),printf(" "); else//数字 color(mapc[i][j]),printf("%d",map1[i][j]); } } }
c++:贪吃蛇:
#include <cstdio> #include <iostream> #include <ctime> #include <conio.h> #include <windows.h> //停顿:Sleep(); #include <cstdlib> //清屏:system("cls"); #include <cstring> //1:'◎' 2:'⊙' 3:'▲' 4:'◆' 5:'■' using namespace std; int a[100][100], dir[100][100]; //string guo[5]={'▲','◆','■','▼','★'}; int fx[4][2] = { {0,-1},{1,0},{0,1},{-1,0} }; //ap来记录奖励块的分 int n, m, ff, f = 1, t = 50, T = 50, ap = 10, egg[2], danshu, headx, heady, endx, endy, point = 0, apple = 0, fangx, stopp = 0, panduan = 0; //ff用来判断 panduan 0:中途退出;1:咬到自己;2:重置 int lastfx; int zuobi = 0; int fff[110][110]; string print[4][4] = { {"═","╔"," ","╚"},{"╝","║","╚"," "},{" ","╗","═","╝"},{"╗"," ","╔","║"} }; void color(int a)//颜色函数 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a); } void gotoxy(int x, int y)//位置函数(行为x 列为y) { COORD pos; pos.X = 2 * y; pos.Y = x; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void reset() { system("cls"); color(7); printf(" ★"); color(10); printf("贪吃蛇"); color(11); printf("★\n\n"); color(7); printf("⊙打印若有错位请调整窗口大小或按r重输小点的数⊙\n\n 请输入场地大小(格式:列数 行数) 推荐(30 20) \n\n>>"); scanf("%d%d", &n, &m); system("cls"); color(14); for (int i = 1; i <= m; i++) { gotoxy(0, i); printf("※"); gotoxy(n + 1, i); printf("※"); } for (int i = 1; i <= n; i++) { gotoxy(i, 0); printf("※"); gotoxy(i, m + 1); printf("※"); } color(10); memset(fff, 0, sizeof(fff)); gotoxy(0, 0); printf("┍"); gotoxy(n + 1, 0); printf("┕"); gotoxy(0, m + 1); printf("┑"); gotoxy(n + 1, m + 1); printf("┙"); color(7); gotoxy(0, m + 5); printf("方向:a/s/d/w | 1/2/3/5"); gotoxy(1, m + 5); printf("暂停:p | 0"); gotoxy(2, m + 5); printf("减速:q/j | 4/7"); gotoxy(3, m + 5); printf("加速:e/k | 6/9"); gotoxy(4, m + 5); printf("重置:r | ."); gotoxy(5, m + 5); printf("地图:h | +"); headx = endx = endy = 1; heady = 3; f = 1; ff = 3; memset(a, 1, sizeof(a)); memset(dir, 0, sizeof(dir)); a[1][1] = a[1][2] = a[1][3] = 0; gotoxy(1, 1); printf("⊙"); gotoxy(1, 2); printf("⊙"); gotoxy(1, 3); printf("◎"); dir[1][1] = dir[1][2] = dir[1][3] = 2; apple = 0; fangx = 2; point = 0; danshu = 0; lastfx = 2; stopp = 0; if (zuobi) { color(12); gotoxy(12, m + 5); printf("作弊可耻!"); gotoxy(m + 4, 0); printf("做了弊还没路走那就救不了你了,乖乖重来吧......"); color(7); } } void haha() { char ch = getch(); if ((ch == 'a' || ch == '1') && dir[headx][heady] != 2) { fangx = 0; return; } if ((ch == 's' || ch == '2') && dir[headx][heady] != 3) { fangx = 1; return; } if ((ch == 'd' || ch == '3') && dir[headx][heady] != 0) { fangx = 2; return; } if ((ch == 'w' || ch == '5') && dir[headx][heady] != 1) { fangx = 3; return; } if (ch == 'p' || ch == '0') { stopp = (stopp + 1) % 2; return; } if (ch == 'q' || ch == '4') { T += 10; if (T >= 1005) T = 1005; return; } if (ch == 'e' || ch == '6') { T -= 10; if (T <= 1) T = 2; return; } if (ch == 'j' || ch == '7') { T += 1; if (T >= 1005) T = 1005; return; } if (ch == 'k' || ch == '9') { T -= 1; if (T <= 1) T = 2; return; } if (ch == 'r' || ch == '.') { ff = 2; f = 0; panduan = 0; return; } if (ch == 'h' || ch == '8') { zuobi += 1; zuobi %= 2; if (zuobi) { color(12); gotoxy(12, m + 5); printf("作弊可耻!"); gotoxy(m + 4, 0); printf("做了弊还没路走那就救不了你了,乖乖重来吧......"); color(7); } else { printf(" "); gotoxy(m + 4, 0); printf(" "); } } if (ch == 'g' || ch == '+') { gotoxy(n + 50, 0); printf("现在切换到地图编辑模式\n\nq/4 为开始放置模式(光标移动过的痕迹会留下障碍物)\n\ne/6 为取消放置障碍物模式\n\nj/0 为橡皮模式(再按一次退出橡皮模式)\n\n按 h/+ 继续游戏\n\n"); printf("\n按任意键开始编辑地图"); color(13); int x = 1, y = 1, dfx, moshi = 0; ch = getch(); gotoxy(0, 0); gotoxy(1, 1); while (ch != 'h' && ch != '+') { if (ch == 'a' || ch == '1') dfx = 0; else if (ch == 's' || ch == '2') dfx = 1; else if (ch == 'd' || ch == '3') dfx = 2; else if (ch == 'w' || ch == '5') dfx = 3; else dfx = 5; if (ch == 'q' || ch == '4') moshi = 1; if (ch == 'e' || ch == '6') moshi = 0; if (ch == 'j' || ch == '0') if (moshi - 2) moshi = 2; else moshi = 0; if (dfx <= 4) { if (x + fx[dfx][0] > 0 && x + fx[dfx][0] <= n && y + fx[dfx][1] > 0 && y + fx[dfx][1] <= m) { x += fx[dfx][0]; y += fx[dfx][1]; } if (x > 0 && x <= n && y > 0 && y <= m) { gotoxy(x, y); if (moshi == 1 && a[x][y] && !fff[x][y]) { a[x][y] = 0; fff[x][y] = 1; printf("□"); } if (moshi == 2 && fff[x][y]) { a[x][y] = 1; fff[x][y] = 0; printf(" "); } gotoxy(x, y); } } ch = getch(); } color(7); } } void findegg() { srand(time(NULL)); int aa = 1; while (!a[egg[0]][egg[1]]) { egg[0] = (rand() % (n)) + 1; egg[1] = (rand() % m) + 1; } a[egg[0]][egg[1]] = 0; point += ap; gotoxy(egg[0], egg[1]); if (!apple) { printf("★"); ap = 8000 / T; if (ap >= 200) ap = 200; } else { printf("●"); ap = 10; } apple++; apple = apple % 10; gotoxy(n + 2, 0); printf("距离下一个奖励蛋还有 "); color(11); cout << 9 - (8 + apple) % 10; color(7); printf(" 个"); danshu++; return; } int gg() { if (ff == 0) return(0); if (ff == 1) { gotoxy(n + 2, 1); Sleep(3000); gotoxy(n + 26, 1); gotoxy(n + 10, 0); printf("哦豁~ 你咬到自己了o( ̄▽ ̄)d\n\n\n你共吃蛋 %d 个\n\n\n你共得分 %d 分,恭喜!\n\n\n等一下就继续", danshu, point); Sleep(5000); if (kbhit) return(1); } if (ff == 2) return(1); return 0; } void dong() { gotoxy(11, m + 3); printf("当前的蛋有 %d 分 ", ap); if (ap - 3 > 10) ap -= 3; if (ap != 10) { gotoxy(egg[0], egg[1]); color(ap % 10); printf("★"); color(7); } int x, y; x = (headx + fx[fangx][0] - 1 + n) % (n)+1; y = (heady + fx[fangx][1] - 1 + m) % (m)+1; dir[headx][heady] = fangx; if (x == egg[0] && y == egg[1]) { gotoxy(headx, heady); cout << print[lastfx][fangx]; dir[headx][heady] = fangx; headx = x; heady = y; a[x][y] = 0; gotoxy(headx, heady); printf("◎"); findegg(); } else if (a[x][y]) { gotoxy(headx, heady); cout << print[lastfx][fangx]; headx = x; heady = y; a[x][y] = 0; gotoxy(headx, heady); printf("◎"); gotoxy(endx, endy); printf(" "); a[endx][endy] = 1; x = endx; y = endy; endx += fx[dir[x][y]][0]; endx = (endx - 1 + n) % (n)+1; endy += fx[dir[x][y]][1]; endy = (endy - 1 + m) % (m)+1; dir[x][y] = -1; } else if (!zuobi) { f = 0; ff = 1; } dir[headx][heady] = fangx; lastfx = fangx; return; } int main() { while (1) { srand(time(NULL)); reset(); egg[0] = (rand() % n - 1) + 2; egg[1] = (rand() % m) + 1; a[egg[0]][egg[1]] = 0; gotoxy(egg[0], egg[1]); if (apple) { printf("★"); ap = 100; } else printf("●"); while (f) { if (kbhit()) haha(); gotoxy(9, m + 5); printf("吃蛋:%d 个", danshu); gotoxy(8, m + 5); printf("速度: %d ", 1005 - T); //while (stopp) {Sleep(10); if (kbhit()) haha();} Sleep(1); t = (t - 1 + T) % T; if (t == 0 && !stopp) dong(); gotoxy(7, m + 5); printf("得分:%d 分", point); gotoxy(12, m + 5); } if (!gg()) return 0; } return 0; }
-
通过的题目
-
最近活动
This person is lazy and didn't join any contests or homework. -
最近编写的题解
This person is lazy and didn't write any solutions.