双人手动发牌

初始版本很简单,输入两人名字,再每人输入5张牌

#include<iostream>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
map<string,int>mp;
struct node{string name,type_name;int cards[5];
}player[100];
void list()
{mp["方2"]=1;   mp["梅2"]=2;   mp["红2"]=3;   mp["黑2"]=4;mp["方3"]=5;   mp["梅3"]=6;   mp["红3"]=7;   mp["黑3"]=8;mp["方4"]=9;   mp["梅4"]=10;  mp["红4"]=11;  mp["黑4"]=12;mp["方5"]=13;  mp["梅5"]=14;  mp["红5"]=15;  mp["黑5"]=16;mp["方6"]=17;  mp["梅6"]=18;  mp["红6"]=19;  mp["黑6"]=20;mp["方7"]=21;  mp["梅7"]=22;  mp["红7"]=23;  mp["黑7"]=24;mp["方8"]=25;  mp["梅8"]=26;  mp["红8"]=27;  mp["黑8"]=28;mp["方9"]=29;  mp["梅9"]=30;  mp["红9"]=31;  mp["黑9"]=32;mp["方10"]=33; mp["梅10"]=34; mp["红10"]=35; mp["黑10"]=36;mp["方J"]=37;  mp["梅J"]=38;  mp["红J"]=39;  mp["黑J"]=40;mp["方Q"]=41;  mp["梅Q"]=42;  mp["红Q"]=43;  mp["黑Q"]=44;mp["方K"]=45;  mp["梅K"]=46;  mp["红K"]=47;  mp["黑K"]=48;mp["方A"]=49;  mp["梅A"]=50;  mp["红A"]=51;  mp["黑A"]=52;
}
int shun(int num[])
{for(int i=1;i<5;i++)if((num[i-1]-1)/4!=(num[i]-1)/4-1)return 0; //不是顺子for(int i=1;i<5;i++)if(num[i]-num[i-1]!=4)return 4;    //普通顺子if((num[0]-1)/4==8)return 9;    //皇家同花顺return 8;    //同花顺
}
int dui(int num[])
{map<int,int>mp_flag;for(int i=0;i<5;i++)mp_flag[(num[i]-1)/4]++;map<int,int>::iterator it=mp_flag.begin();if(mp_flag.size()==2){if(it->second==4||(++it)->second==4)return 7;   //四条else return 6;  //葫芦(三条加对子) }else if(mp_flag.size()==3){if(it->second==3||(++it)->second==3||mp_flag[2]==3)return 3;    //三条else return 2;  //两对 }else if(mp_flag.size()==4)return 1; //对子else return 0;
}
int flower(int num[])
{int count=0,flag=num[0]%4;for(int i=1;i<5;i++)if(num[i]%4!=flag)return 0;return 5;    //同花
}
int type(int num[]) //对每种类型进行编码
{int flag=max({shun(num),dui(num),flower(num)});switch(flag)   //是顺子就不可能是对子,但有可能是同花 {//因为牌在主函数已经排好序了case 9:case 8:case 5:case 4:return flag*20000+(num[4]-1)/4;case 7:case 6:case 3:return flag*20000+(num[2]-1)/4;case 2:{int count=40000,flag_1=2;count+=((num[3]-1)/4+1)*pow(14,flag_1--);count+=((num[1]-1)/4+1)*pow(14,flag_1--);if(num[0]!=num[1])count+=(num[0]-1)/4+1;else if(num[4]!=num[3])count+=(num[4]-1)/4+1;else count+=(num[2]-1)/4+1;return count;}case 1:{int count=0,flag_1=0;for(int i=0;i<5;i++)if((num[i]-1)/4==(num[i+1]-1)/4){count+=((num[i]-1)/4+1)*2600;i++;}else count+=((num[i]-1)/4+1)*pow(14,flag_1++);return count;}case 0:{int count=0,flag_1=0;for(int i=4;i>=0;i--)count+=-(13-(num[i]-1)/4)*pow(14,flag_1++);return count;}}
}
void cards_name(int n)
{for(int i=0;i<n;i++){switch(type(player[i].cards)/20000){case 9:player[i].type_name="皇家同花顺";break;case 8:player[i].type_name="同花顺";break;case 7:player[i].type_name="四条";break;case 6:player[i].type_name="葫芦";break;case 5:player[i].type_name="同花";break;case 4:player[i].type_name="顺子";break;case 3:player[i].type_name="三条";break;case 2:player[i].type_name="两对";break;case 1:case 0:player[i].type_name="对子";break;default:player[i].type_name="高牌";break;}}
}
int main()
{list();cout<<"输入两位玩家名字:"<<endl;for(int i=0;i<2;i++)cin>>player[i].name;for(int i=0;i<2;i++){cout<<"输入"<<player[i].name<<"的五张牌:";for(int j=0;j<5;j++) {string s;cin>>s;player[i].cards[j]=mp[s];}sort(player[i].cards,player[i].cards+5); //对每位玩家的牌进行排序 }cards_name(2);cout<<dui(player[0].cards)<<endl;cout<<player[0].name<<"  "<<player[0].type_name<<endl;cout<<player[1].name<<"  "<<player[1].type_name<<endl;if(type(player[0].cards)>type(player[1].cards))cout<<player[0].name<<"赢"; else if(type(player[0].cards)==type(player[1].cards)) cout<<"平局";else cout<<player[1].name<<"赢";return 0;
}

多人手动发牌

此版本较上一版本增加了多人模式,以及输入牌型错误时提示重新输入功能

#include<iostream>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
map<string,int>mp;
struct node{string name,type_name;int cards[5];
}player[100];
void list()
{mp["方2"]=1;   mp["梅2"]=2;   mp["红2"]=3;   mp["黑2"]=4;mp["方3"]=5;   mp["梅3"]=6;   mp["红3"]=7;   mp["黑3"]=8;mp["方4"]=9;   mp["梅4"]=10;  mp["红4"]=11;  mp["黑4"]=12;mp["方5"]=13;  mp["梅5"]=14;  mp["红5"]=15;  mp["黑5"]=16;mp["方6"]=17;  mp["梅6"]=18;  mp["红6"]=19;  mp["黑6"]=20;mp["方7"]=21;  mp["梅7"]=22;  mp["红7"]=23;  mp["黑7"]=24;mp["方8"]=25;  mp["梅8"]=26;  mp["红8"]=27;  mp["黑8"]=28;mp["方9"]=29;  mp["梅9"]=30;  mp["红9"]=31;  mp["黑9"]=32;mp["方10"]=33; mp["梅10"]=34; mp["红10"]=35; mp["黑10"]=36;mp["方J"]=37;  mp["梅J"]=38;  mp["红J"]=39;  mp["黑J"]=40;mp["方Q"]=41;  mp["梅Q"]=42;  mp["红Q"]=43;  mp["黑Q"]=44;mp["方K"]=45;  mp["梅K"]=46;  mp["红K"]=47;  mp["黑K"]=48;mp["方A"]=49;  mp["梅A"]=50;  mp["红A"]=51;  mp["黑A"]=52;
}
int shun(int num[])
{for(int i=1;i<5;i++)if((num[i-1]-1)/4!=(num[i]-1)/4-1)return 0; //不是顺子for(int i=1;i<5;i++)if(num[i]-num[i-1]!=4)return 4;    //普通顺子if((num[0]-1)/4==8)return 9;    //皇家同花顺return 8;    //同花顺
}
int dui(int num[])
{map<int,int>mp_flag;for(int i=0;i<5;i++)mp_flag[(num[i]-1)/4]++;map<int,int>::iterator it=mp_flag.begin();if(mp_flag.size()==2){if(it->second==4||(++it)->second==4)return 7;   //四条else return 6;  //葫芦(三条加对子) }else if(mp_flag.size()==3){if(it->second==3||(++it)->second==3||mp_flag[2]==3)return 3;    //三条else return 2;  //两对 }else if(mp_flag.size()==4)return 1; //对子else return 0;
}
int flower(int num[])
{int count=0,flag=num[0]%4;for(int i=1;i<5;i++)if(num[i]%4!=flag)return 0;return 5;    //同花
}
int type(int num[]) //对每种类型进行编码
{int flag=max({shun(num),dui(num),flower(num)});switch(flag)   //是顺子就不可能是对子,但有可能是同花 {//因为牌在主函数已经排好序了case 9:case 8:case 5:case 4:return flag*20000+(num[4]-1)/4;case 7:case 6:case 3:return flag*20000+(num[2]-1)/4;case 2:{int count=40000,flag_1=2;count+=((num[3]-1)/4+1)*pow(14,flag_1--);count+=((num[1]-1)/4+1)*pow(14,flag_1--);if(num[0]!=num[1])count+=(num[0]-1)/4+1;else if(num[4]!=num[3])count+=(num[4]-1)/4+1;else count+=(num[2]-1)/4+1;return count;}case 1:{int count=0,flag_1=0;for(int i=0;i<5;i++)if((num[i]-1)/4==(num[i+1]-1)/4){count+=((num[i]-1)/4+1)*2600;i++;}else count+=((num[i]-1)/4+1)*pow(14,flag_1++);return count;}case 0:{int count=0,flag_1=0;for(int i=4;i>=0;i--)count+=-(13-(num[i]-1)/4)*pow(14,flag_1++);return count;}}
}
void cards_name(int n)
{for(int i=0;i<n;i++){switch(type(player[i].cards)/20000){case 9:player[i].type_name="皇家同花顺";break;case 8:player[i].type_name="同花顺";break;case 7:player[i].type_name="四条";break;case 6:player[i].type_name="葫芦";break;case 5:player[i].type_name="同花";break;case 4:player[i].type_name="顺子";break;case 3:player[i].type_name="三条";break;case 2:player[i].type_name="两对";break;case 1:case 0:player[i].type_name="对子";break;default:player[i].type_name="高牌";break;}}
}
bool cmp(node a,node b)
{return type(a.cards)>type(b.cards);
}
int main()
{list();int N; cout<<"输入玩家人数:";cin>>N;cout<<"输入"<<N<<"位玩家名字:"<<endl;for(int i=0;i<N;i++)cin>>player[i].name;for(int i=0;i<N;i++){cout<<"输入"<<player[i].name<<"的五张牌:";for(int j=0;j<5;j++) {string s;cin>>s;while(mp.find(s)==mp.end()){cout<<"第"<<j+1<<"张牌输入错误,请重新输入!"<<endl;cin>>s; }player[i].cards[j]=mp[s];}sort(player[i].cards,player[i].cards+5);    //对每位玩家的牌进行排序 }cards_name(N);   //存入玩家卡片类型名 sort(player,player+N,cmp); //对玩家按牌大小排序 if(type(player[0].cards)==type(player[1].cards))cout<<"平局"; else cout<<player[0].name<<"赢!牌型为:"<<player[0].type_name;return 0;
}

多人手动、自动发牌

此版本较上一版本多了自动发牌功能,因期末作业截止了,所以自动发牌还是有些bug,以后有时间再做修改。

#include<iostream>
#include<algorithm>
#include<map>
#include<cmath>
#include<iomanip>
using namespace std;
map<string,int>mp;
string public_cards="";
struct node{string name,type_name,cards_name[7];int cards[5],all_cards[8];
}player[100];
void list()
{mp["方2"]=1;   mp["梅2"]=2;   mp["红2"]=3;   mp["黑2"]=4;mp["方3"]=5;   mp["梅3"]=6;   mp["红3"]=7;   mp["黑3"]=8;mp["方4"]=9;   mp["梅4"]=10;  mp["红4"]=11;  mp["黑4"]=12;mp["方5"]=13;  mp["梅5"]=14;  mp["红5"]=15;  mp["黑5"]=16;mp["方6"]=17;  mp["梅6"]=18;  mp["红6"]=19;  mp["黑6"]=20;mp["方7"]=21;  mp["梅7"]=22;  mp["红7"]=23;  mp["黑7"]=24;mp["方8"]=25;  mp["梅8"]=26;  mp["红8"]=27;  mp["黑8"]=28;mp["方9"]=29;  mp["梅9"]=30;  mp["红9"]=31;  mp["黑9"]=32;mp["方10"]=33; mp["梅10"]=34; mp["红10"]=35; mp["黑10"]=36;mp["方J"]=37;  mp["梅J"]=38;  mp["红J"]=39;  mp["黑J"]=40;mp["方Q"]=41;  mp["梅Q"]=42;  mp["红Q"]=43;  mp["黑Q"]=44;mp["方K"]=45;  mp["梅K"]=46;  mp["红K"]=47;  mp["黑K"]=48;mp["方A"]=49;  mp["梅A"]=50;  mp["红A"]=51;  mp["黑A"]=52;
}
int shun(int num[])
{for(int i=1;i<5;i++)if((num[i-1]-1)/4!=(num[i]-1)/4-1)return 0; //不是顺子for(int i=1;i<5;i++)if(num[i]-num[i-1]!=4)return 4;    //普通顺子if((num[0]-1)/4==8)return 9;    //皇家同花顺return 8;    //同花顺
}
int dui(int num[])
{map<int,int>mp_flag;for(int i=0;i<5;i++)mp_flag[(num[i]-1)/4]++;map<int,int>::iterator it=mp_flag.begin();if(mp_flag.size()==2){if(it->second==4||(++it)->second==4)return 7;   //四条else return 6;  //葫芦(三条加对子) }else if(mp_flag.size()==3){if(it->second==3||(++it)->second==3||mp_flag[2]==3)return 3;    //三条else return 2;  //两对 }else if(mp_flag.size()==4)return 1; //对子else return 0;
}
int flower(int num[])
{int count=0,flag=num[0]%4;for(int i=1;i<5;i++)if(num[i]%4!=flag)return 0;return 5;    //同花
}
int type(int num[]) //对每种类型进行编码
{int flag=max({shun(num),dui(num),flower(num)});switch(flag)   //是顺子就不可能是对子,但有可能是同花 {//因为牌在主函数已经排好序了case 9:case 8:case 5:case 4:return flag*20000+(num[4]-1)/4;case 7:case 6:case 3:return flag*20000+(num[2]-1)/4;case 2:{int count=40000,flag_1=2;count+=((num[3]-1)/4+1)*pow(14,flag_1--);count+=((num[1]-1)/4+1)*pow(14,flag_1--);if(num[0]!=num[1])count+=(num[0]-1)/4+1;else if(num[4]!=num[3])count+=(num[4]-1)/4+1;else count+=(num[2]-1)/4+1;return count;}case 1:{int count=0,flag_1=0;for(int i=0;i<5;i++)if((num[i]-1)/4==(num[i+1]-1)/4){count+=((num[i]-1)/4+1)*2600;i++;}else count+=((num[i]-1)/4+1)*pow(14,flag_1++);return count;}case 0:{int count=0,flag_1=0;for(int i=4;i>=0;i--)count+=-(13-(num[i]-1)/4)*pow(14,flag_1++);return count;}}
}
void cards_name(int n)
{for(int i=0;i<n;i++){switch(type(player[i].cards)/20000){case 9:player[i].type_name="皇家同花顺";break;case 8:player[i].type_name="同花顺";break;case 7:player[i].type_name="四条";break;case 6:player[i].type_name="葫芦";break;case 5:player[i].type_name="同花";break;case 4:player[i].type_name="顺子";break;case 3:player[i].type_name="三条";break;case 2:player[i].type_name="两对";break;case 1:case 0:player[i].type_name="对子";break;default:player[i].type_name="高牌";break;}}
}
bool cmp(node a,node b)
{return type(a.cards)>type(b.cards);
}
string fp() //发牌
{    int m=rand()%52+1;map<string,int>::iterator it=mp.begin();for(it;m!=it->second;it++);return it->first;
}
void delete_player(int m,int n){  //玩家中途弃权 for(m;m<n-1;m++)player[m]=player[m+1];
}
void fixed(int N)   //固定发牌
{for(int i=0;i<N;i++){cout<<"输入"<<player[i].name<<"的五张牌:";for(int j=0;j<5;j++) {string s;cin>>s;while(mp.find(s)==mp.end()){cout<<"第"<<j+1<<"张牌输入错误,请重新输入!"<<endl;cin>>s; }player[i].cards[j]=mp[s];}sort(player[i].cards,player[i].cards+5);   //对每位玩家的牌进行排序 }
}
int game(int N)
{int k=5;while(1){system("cls");char c;for(int i=0;i<N;i++)cout<<left<<setw(11)<<player[i].name;cout<<"公共牌:"<<public_cards<<endl;for(int i=0;i<N;i++)cout<<left<<setw(3)<<player[i].cards_name[0]<<" "<<setw(7)<<player[i].cards_name[1];cout<<endl;for(int i=0;i<N;i++){cout<<player[i].name<<",你是否继续押注? Y/N\t";cin>>c;if(c=='Y'||c=='y');else{delete_player(i,N);N--;i--;}}if(N==1||k==7)break;string m=fp();for(int j=0;j<N;j++){player[j].cards_name[k]=m;player[j].all_cards[k]=mp[m];}k++;public_cards+=m+" ";}return N;
}
int *compare_6(int *a)
{static int *b,n[5];    //必须要改为静态,因为指针出了函数就重置了 int max=-10000000;for(int i=0;i<6;i++){int flag=0;for(int j=0;j<6;j++)if(i!=j)n[flag++]=a[j];cout<<type(n)<<" ";if(type(n)>max)b=n;}cout<<endl<<type(b)<<endl;return b;
}
int *compare_7(int *a)
{static int *b=new int[5];int n[5],max=-10000000;for(int i=0;i<7;i++)for(int j=0;j<7;j++){int flag=0;for(int k=0;k<7;k++)if(k!=i&&k!=j&&i!=j)n[flag++]=a[k];if(type(n)>max)b=n;}         return b;
}
void max_cards(int N)
{int count=0,max=-10000000;while(player[0].all_cards[count]!=0)count++;for(int i=0;i<N;i++){int *m;if(count==5)m=player[i].all_cards;if(count==6)m=compare_6(player[i].all_cards);if(count==7)m=compare_7(player[i].all_cards);for(int j=0;j<5;j++)player[i].cards[j]=m[j];sort(player[i].cards,player[i].cards+5); for(int j=0;j<5;j++)cout<<player[i].cards[j]<<" ";}
}
int random(int N)
{string m,n;for(int i=0;i<N;i++)  //发手牌 {for(int j=0;j<2;j++){m=fp();player[i].cards_name[j]=m;player[i].all_cards[j]=mp[m];}}for(int i=2;i<5;i++) //发公共牌 {m=fp();for(int j=0;j<N;j++){player[j].cards_name[i]=m;player[j].all_cards[i]=mp[m];}public_cards+=m+" ";}N=game(N);max_cards(N);return N;
}
int main()
{list();srand(time(0));int N,m; cout<<"输入玩家人数:";cin>>N;cout<<"输入"<<N<<"位玩家名字:"<<endl;for(int i=0;i<N;i++)cin>>player[i].name;cout<<"请选择随机发牌(0)/固定发牌(1):";cin>>m;if(!m)N=random(N);    //随机发牌 else fixed(N);       //固定发牌 cards_name(N);   //存入玩家卡片类型名 sort(player,player+N,cmp); //对玩家按牌大小排序 if(N==1)cout<<player[0].name<<"赢!牌型为:"<<player[0].type_name;else if(type(player[0].cards)==type(player[1].cards))cout<<"平局"; else cout<<player[0].name<<"赢!牌型为:"<<player[0].type_name;return 0;
}

期末大作业--德州扑克(包含双人手动发牌,多人手动发牌,多人手动、自动发牌三个版本)相关推荐

  1. HTML+CSS静态页面网页设计作业——餐饮店铺(1页) web前端设计与开发期末作品_期末大作业

    HTML5期末大作业:餐饮网站设计--餐饮店铺(1页) 文章目录 HTML5期末大作业:餐饮网站设计--餐饮店铺(1页) 一.作品展示 二.文件目录 三.代码实现 四.获取更多源码 一.作品展示 二. ...

  2. 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  3. 1000套HTML5期末大作业——电影我不是药神响应式页面带轮播(4页)

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  4. HTML期末大作业课程设计动漫主题html5网页~奇恩动漫首页html模板(HTML+CSS)~个人设计web前端大作业...

    HTML期末大作业课程设计动漫主题html5网页~奇恩动漫首页html模板(HTML+CSS) ~个人设计web前端大作业 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTM ...

  5. HTML5期末大作业【红色的电影售票平台网站】web前端 html+css+javascript网页设计实例 企业网站制作

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  6. web前端期末大作业 在线电影网页设计与制作 HTML+CSS+JavaScript仿叮当电影网页制作

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  7. 大一学生期末大作业 html+css+javascript网页设计实例【电影购票项目】html网页制作成品代码

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  8. 数字图像处理期末大作业-美图秀秀

    本项目是以matlab为主语言并设计GUI界面的一款简易美图秀秀,包含基础的图像处理和一些常见美颜算法 对于一些matlab较难实现的算法采用C++或python来实现 ⭐️ github地址:htt ...

  9. HTML期末大作业课程设计动漫主题html5网页~奇恩动漫首页html模板(HTML+CSS)~个人设计web前端大作业

    HTML期末大作业课程设计动漫主题html5网页~奇恩动漫首页html模板(HTML+CSS) ~个人设计web前端大作业 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTM ...

最新文章

  1. python 3元运算符
  2. 英伟达 400 亿美元收购 ARM 受阻,不妨考虑 VMware?
  3. 简单理解:同步、异步、阻塞、非阻塞
  4. python模块--json \ pickle \ shelve \ XML模块
  5. VTK:等参细胞演示用法实战
  6. JDBC连接池JDBCTemplate课堂笔记
  7. 关于node-sass和sass-loader安装上去的时候的时候报错的问题
  8. c#输出最大值、最小值和平均值(A)【C#】
  9. struts的开发模式
  10. websocket 学习--简单使用,nodejs搭建websocket服务器,到模拟股票,到实现聊天室
  11. ExtJS 4 Beta 2预览:Ext.Brew包
  12. 您的用户账户没有连接到http://192.168.0.112:8080/tfs上的team foundation server的权限
  13. python 今日头条 控制手机_你知道Python脚本控制安卓手机可以用来做什么吗?
  14. c语言分数等级switch,用switch输出分数等级
  15. 互联网晚报 | 12月9日 星期四 | 微博正式登陆港交所;OPPO官宣首款自研芯片即将发布;腾讯启动“技术公益创投计划”...
  16. kafka如何创建topic
  17. Docker创始人兼CTO宣布离职;特斯拉被爆处于破产边缘;iOS更新,支持京沪地铁卡;谷歌安卓侵权案面临88亿美元赔款丨Q新闻...
  18. iOS 15.3+ SwiftUI中List子项目禁止被删除但头部仍显示删除按钮的解决
  19. Visual SLAM: What are the Current Trends and What to Expect?
  20. 融汇小学计算机课程,《小学信息技术行走课堂》读书心得

热门文章

  1. Android高级进阶——绘图篇(五)setXfermode 设置混合模式
  2. c语言字节变量怎样定义,C语言之定义变量_wx5c99a1487a5ff的博客的技术博客_51CTO博客...
  3. mbp 封神台靶场 一(笔记)
  4. 固定td宽度令其不随内容改变以及固定tr的高度
  5. An end-to-end heterogeneous graph representation learning-based framework for drug–target interactio
  6. Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过
  7. 一本正经需求洽谈老黄历 No.136
  8. 根据地理位置多语言切换(1)- 获取地理位置信息
  9. 互为对偶的两个线性规划问题的解存在关系
  10. 我与兼阅万,有个美丽的邂逅