C算法——生成牌 洗牌算法

news2025/1/19 14:32:12
  1. 生成牌

//
// Created by Lenovo on 2022-06-11-下午 3:15.
// 作者:小象
// 版本:1.0
//


#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define M 1 // 基数
#define N 20 // 洗牌次数
#define TOTAL_NUMS (N - M + 1) // 每一副牌的数量

/**
 * <h2>随机生成不重复的数字序列</h2>
 */
int main() {
    int cards[TOTAL_NUMS];
    int i, j;
    int id1, id2;
    int swap_temp;
    // 随机数种子生成器
    srand(time(NULL));
    // 洗牌20次
    for (j = 1; j <= 20; j++) {

        // 生成有序、完整的每一张扑克牌(即:一套扑克牌)
        for (i = 0; i < TOTAL_NUMS; i++) {
            cards[i] = M + i;
        }
        // 洗牌算法(打乱生成的扑克牌,打乱totalNums次)
        for (i = 0; i < TOTAL_NUMS; i++) {
            id1 = rand() % (TOTAL_NUMS);
            id2 = rand() % (TOTAL_NUMS);
            swap_temp = cards[id1];
            cards[id1] = cards[id2];
            cards[id2] = swap_temp;
        }

        // 每洗一次牌,打印一次结果
        printf("第%02d副牌:", j);
        for (i = 0; i < TOTAL_NUMS; i++) {
            printf("%3d", cards[i]);
        }
        printf("\n");

    }
    getchar();
}


生成牌结果

在这里插入图片描述

  1. 洗牌算法

//
// Created by Lenovo on 2022-03-15-下午 4:56.
// 作者:小象
// 版本:1.0
//

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

#define NUM 10

void swapInt(int *a, int *b);

void knuthShuffle(int a[], int n, int b[][NUM]);

void swapInt(int *a, int *b) {
    int t;
    t = *a;
    *a = *b;
    *b = t;
}

void knuthShuffle(int a[], int n, int b[][NUM]) {
    int i;
    for (i = n - 1; i >= 1; i--) {
        swapInt(&a[i], &a[rand() % (i + 1)]); // 保证了每一个位置随机可能为O(n)
        // 洗牌原理:
        /*
         * 1. 从最后一个元素开始,这个元素和 随机其他位置 上的一个元素 交换位置(这里包括自己的位置)
         * 2. 然后到最后一个元素-1的位置上,重复 步骤 1
         * 3. 直到 只剩下一个元素一个位置
         */
    }
    for (i = 0; i < n; i++) {
        b[a[i] - 1][i]++; // 用二位数组装 第a[i]-1的牌面的第i+1张牌
    }
}

/**
 * <h2>洗牌算法</h2>
 * @return 0
 */
int main() {

    int i, j, sum, a[NUM], b[NUM][NUM] = {0};

    srand(time(NULL));

    for (i = 0; i < NUM; i++) { // 顺序赋值 1~10给数组
        a[i] = i + 1;
    }

    for (j = 0; j < 10000; j++) { // 洗10000次
        knuthShuffle(a, NUM, b); // 洗一次牌
    }
    printf("牌面");
    for (i = 0; i < NUM; i++) {
        printf(" 位置%02d次数", i + 1);
    }
    printf("  总次数");
    printf("\n");
    for (i = 0; i < NUM; i++) {
        printf(" %02d ", i + 1);
        for (j = 0, sum = 0; j < NUM; j++) {
            if (b[i][j] > 0) {
                printf("%8d   ", b[i][j]);
                sum += b[i][j];
            }
        }
        printf("%7d", sum);
        printf("\n");
    }

    getchar();
}

洗牌结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp运行项目到iOS基座

2022年9月&#xff0c;因收到苹果公司警告&#xff0c;目前开发者已无法在iOS真机设备使用未签名的标准基座&#xff0c;所以现在要运行到 IOS &#xff0c;也需要进行签名。 Windows系统&#xff0c;HBuilderX 3.6.20以下版本&#xff0c;无法像MacOSX那样对标准基座进行签名…

c++基于游戏壳的飞机大战游戏----开发(第二部分)

c基于游戏壳的飞机大战游戏----开发&#xff08;第二部分&#xff09; 一.我们先将每个功能按文件夹进行分类&#xff08;这样便于管理&#xff09; 如下 每一个文件里都写出相应的头文件与源文件&#xff08;GameFrame文件夹中的内容是上一篇博客中写好的游戏壳代码&#xf…

【汇总】解决Ajax请求后端接口,返回ModelAndView页面不跳转

【汇总】解决Ajax请求后端接口&#xff0c;返回ModelAndView不跳转 问题发现问题解决方法一&#xff1a;直接跳转到指定URL&#xff08;推荐&#xff09;方法二&#xff1a;将返回的html内容&#xff0c;插入到页面某个元素中方法三&#xff1a;操作文档流方法四&#xff1a;使…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

KubeSphere 3.4.0 发布:支持 K8s v1.26

2023 年 07 月 26 日&#xff0c;KubeSphere 开源社区激动地向大家宣布&#xff0c;KubeSphere 3.4.0 正式发布&#xff01; 让我们先简单回顾下之前三个大版本的主要变化&#xff1a; KubeSphere 3.1.0 新增了“边缘计算”、“计量计费” 等功能&#xff0c;将 Kubernetes 从…

【uniapp】【Vue3】 超简单全局自定义弹窗组件Modal

Element-Plus 自动引入&#xff0c;Icon图标不显示 //这样写是不会显示的 <el-icon size"20"><view /> </el-icon>// 应该这样写 <el-icon size"20"><i-ep-view/> </el-icon>// 或 <i-ep-view/>这个名字怎么去…

SpringBoot+ruoyi框架图片上传和文件下载

第一次接触ruoyi框架&#xff0c;碰到文件上传和下载问题&#xff0c;今天来总结一下。 使用若依框架文件上传下载首先配置文件路径要配好。 文件下载&#xff1a; application.yml若依配置 # 项目相关配置 ruoyi:# 名称name: RuoYi# 版本version: 3.6.0# 版权年份copyright…

《向量数据库指南》——向量数据库Milvus Cloud、Pinecone、Vespa、Weaviate、Vald、GSI 、 Qdrant选哪个?

1、Milvus Cloud(https://milvuscloud.com) Milvus是一个开源的向量数据库,支持高效的向量搜索和相似度匹配。它针对大规模向量数据集的性能进行了优化,并提供了Python、Java、Go和C++等多种语言的客户端接口。Milvus在图像、音频、文本和推荐等领域都有广泛的应用。 2…

Gorm 单表操作 查询数据

单表记录查询 //单表记录的查询&#xff0c;var s Studentdb.Debug().Take(&Student{})fmt.Println(s)[1.034ms] [rows:1] SELECT * FROM students LIMIT 1 {0 0 false <nil>} first就是按照主键排序&#xff0c;last就是按照主键倒排。 /…

了解垃圾回收算法

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 垃圾回收&#xff08;Garbage Collect&#xff09;是Java语言中的一种自动内存管理机制&#xff0c;用于自动回收不再使用的对象所占用的内存空间。Java虚拟机会自动追踪和…

python中数据可视化

1.掷一个D6和一个D10 50000次的结果 die.py from random import randintclass Die:def __init__(self, num_sides6):self.num_sides num_sidesdef roll(self):return randint(1, self.num_sides) die_visual.py from die import Die from plotly.graph_objs import Bar, L…

宝塔Linux面板Java项目一键部署(springboot)

部署项目之前请安装相关软件: jdk1.8、redis、nginx 、mysql 等等(项目中用到的) 1. 网站 2. 创建项目文件夹 文件 - /www/wwwroot - 新建项目文件夹 - 存放jar文件 3. 上传jar文件 (直接拖进来) 4. 添加Java项目 5. jar包路径 - 项目端口, 提交(启动项目) 6. 成功运行 7. 浏览…

nodejs VM沙箱绕过

文章目录 nodejs vm沙箱绕过1.基本概念——什么是沙箱&#xff08;sandbox&#xff09;2.nodejs的作用域3.vm模块的运行原理4.沙箱绕过5.沙箱绕过的一些问题 nodejs vm沙箱绕过 1.基本概念——什么是沙箱&#xff08;sandbox&#xff09; 当我们运行一些可能会产生危害的程序…

2023 电赛 E 题 K210方案--K210实现矩形识别

相关库介绍 sensor&#xff08;摄像头&#xff09; sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(10) reset()&#xff1a;重置并初始化单目摄像头 set_pixformat()&#xff1a;设置摄像头输出格式&#xff0c…

云上 Index:看「简墨」如何为云原生打造全新索引

拓数派首款数据计算引擎 PieCloudDB 是一款全新的云原生虚拟数仓。为了提升用户使用体验&#xff0c;提高查询效率&#xff0c;在实现存算分离的同时&#xff0c;PieCloudDB 设计与打造了全新的存储引擎「简墨」等模块&#xff0c;并针对云场景和分析型场景设计了高效的「Data …

长相思追剧小游戏

看效果图 Vue长相思 刚学Vue&#xff0c;正好在追剧&#xff0c;看到这个小案例觉得挺好玩的&#xff0c;第一天学&#xff0c;代码太简陋了 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name&qu…

LLM大模型——langchain相关知识总结

目录 一、简介LangChain的主要价值支柱简单安装 二、 LangChain的主要模块1.Model I/Oprompt模版定义调用语言模型 2. 数据连接3. chains4. Agents5. MemoryCallbacks 三、其他记录多进程调用 主要参考以下开源文档 文档地址&#xff1a;https://python.langchain.com/en/lates…

无人机管控平台,推动电力巡检管理水平提升

各地区无人机作业水平和管理水平存在参差不齐&#xff0c;电力巡检管理要求与业务发展水平不匹配的问题。同时&#xff0c;巡检数据的存储和管理分散&#xff0c;缺乏有效的整合与共享手段&#xff0c;使得内外业脱节&#xff0c;没有形成统一应用和闭环管理。这就导致巡检数据…

【云原生】K8S二进制搭建上篇

目录 一、环境部署1.1操作系统初始化 二、部署etcd集群2.1 准备签发证书环境在 master01 节点上操作在 node01与02 节点上操作 三、部署docker引擎四、部署 Master 组件4.1在 master01 节点上操 五、部署Worker Node组件 一、环境部署 集群IP组件k8s集群master01192.168.243.1…

Vc - Qt - QPainter translate

QPainter的translate()函数是用来对绘制坐标系统进行平移操作的方法。它可以将绘制的原点&#xff08;坐标轴的起始点&#xff09;在水平和垂直方向上进行平移。以下是一个使用QPainter的translate()方法进行坐标平移的示例代码&#xff1a; QPainter painter(this);// 绘制一个…