• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

epiphany-blogs

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

自动洗牌机c++

首先是字符数组与结构体的两个应用比较,牌组s1,s2,s3...,如果用字符数组是不能够把s1捆绑在一起的,观察发现牌组都是一个花色捆绑一个数字,可以联想到结构体。

其次因为涉及交换,可以联想到交换需要一个临时temp结构体来存储,洗牌是重复覆盖行为,所以最后是与自己交换。

期间要注意的是temp.suit[order[i]-1],这里是要减1的,因为数组从0开始。

还有一个数学小发现就是开头for(int i=0;i<13;i++)是i<13,因为牌组也是有规律的,每隔十三张牌一个花色,且数字依次是从1到13,所以后续可为i+13,i+26,i+39。

还有就是格式小问题,最后输出没有空格,所以最后要单独拿出来输出。

代码如下:

# include <iostream>
using namespace std;
int main(){
struct cards{
char suit[54];
int num[54];
};
cards primary;
for(int i=0;i<13;i++){
primary.suit[i] = 'S';
primary.suit[i+13] = 'H';
primary.suit[i+26] = 'C';
primary.suit[i+39] = 'D';
}
primary.suit[52] = primary.suit[53] = 'J';
for(int j=0;j<13;j++){
primary.num[j] = primary.num[j+13] = primary.num[j+26] = primary.num[j+39] = j+1;
}
primary.num[52] = 1;
primary.num[53] = 2;
int n;
int order[54];
cin>>n;
for(int i=0;i<54;i++){
cin>>order[i];
}
while(n--){
cards temp;
for(int i=0;i<54;i++){
temp.suit[order[i]-1] = primary.suit[i];
temp.num[order[i]-1] = primary.num[i];
}
for(int j=0;j<54;j++){
primary.suit[j] = temp.suit[j];
primary.num[j] = temp.num[j];
}
}
for(int i=0;i<53;i++){
cout<<primary.suit[i]<<primary.num[i]<<" ";
}
cout<<primary.suit[53]<<primary.num[53]<<endl;
return 0;
}

posted on 2023-02-25 10:40  epiphany_x  阅读(29)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3