算法设计课第二周(分治 芯片测试)

实验2 芯片测试算法设计

一、【实验目的】

(1)理解分治策略的设计思想;

(2)熟悉将伪码转换为可运行的程序的方法;

(3)能够根据算法的要求设计具体的实例。

二、【实验内容】

   有n片芯片,其中好芯片比坏芯片至少多1片,现需要通过测试从中找出1片好芯片。测试方法是:将2片芯片放到测试台上,2片芯片互相测试并报告测试结果:“好”或者“坏”。假设好芯片的报告是正确的,坏芯片的报告是不可靠的。请设计一个算法,使用最少的测试次数来找出1片好芯片。

提示:可参考教材P29页的算法2.3. 测试函数可以采用以下方法。

#include "stdio.h"

#include <stdlib.h>

#include <time.h>

//建立测试函数,参数iA表示主动测试芯片, iB表示被测芯片.返回值为被测芯片的测试值

//值为1时表示好芯片,为0时表示坏芯片.

//应用随机数来表示不确定的值1、0.注意:在主函数中加上随机数种子语句srand(time(NULL));

//算法的输入可以用数组表示,比如:ABc[17]={1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0} 表示17个芯片,其中9片好芯片、8片坏芯片。

int X_test(int iA,int iB)

{

  if(iA==1)

    return iB;

  return rand()%2; 

}

三、实验源代码

#include <iostream>
using namespace std;
#include <time.h>
#include <queue>int input[] = {-1, 1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,0}; // 输入数组,表示每个芯片的质量// X_test函数用于测试两个芯片之间的连接情况
int X_test(int iA, int iB)
{if(iA == 1)return iB;return rand()%2; // 随机返回0或1
}// testOneChip函数用于测试一个芯片与其他芯片的连接情况
int testOneChip(int chip, int n)
{int count;for(int i=1; i<=n; i++){count += X_test(input[chip], input[i]);}if(count > (n-1)/2) // 奇数,至少有(n-1)/2个报"好"return true;else  //否则报"坏"return false;
}// main函数是程序的入口点
int main()
{srand(time(NULL)); // 设置随机数种子int n = 17; // 芯片数量int k = n; // 当前待测试的芯片数量queue<int> q; // 使用队列存储待测试的芯片下标for(int i=1; i<=n; i++)q.push(i); // 将芯片下标入队while(k > 3){for(int i=1; i<= k/2; i++){int chipIndex1 = q.front(); // 取出队列头部的芯片下标q.pop();int chipIndex2 = q.front(); // 取出队列头部的芯片下标q.pop();int test1 = X_test(input[chipIndex1], input[chipIndex2]); // 测试两个芯片之间的连接情况int test2 = X_test(input[chipIndex2], input[chipIndex1]); // 测试两个芯片之间的连接情况if(test1 == test2 && test2 == 1) // 如果两个芯片都连接良好,则任取一片留下{q.push(chipIndex2);}else{; // 丢弃}}if(k % 2 == 1) // 如果剩余芯片数量为奇数,则对最后一片芯片进行单独测试{int chipIndex1 = q.front();q.pop();if(testOneChip(chipIndex1, n) == true) // 如果该芯片与其他芯片连接良好,则将其加入队列q.push(chipIndex1);}k = q.size(); // 更新当前待测试的芯片数量}int chipIndex1 = q.front(); // 取出队列头部的芯片下标q.pop();int chipIndex2 = q.front(); // 取出队列头部的芯片下标q.pop();if(k == 3) // 如果剩余芯片数量为3,则进行最后一次测试{int test1 = X_test(input[chipIndex1], input[chipIndex2]); // 测试两个芯片之间的连接情况int test2 = X_test(input[chipIndex2], input[chipIndex1]); // 测试两个芯片之间的连接情况if(test1 || test2) // 如果至少有一个芯片连接良好,则输出该芯片的下标{cout << q.front() << endl;return 0;}}if(k == 2 || k == 1) // 如果剩余芯片数量为2或1,则直接输出其中一个芯片的下标{cout << chipIndex1 << endl;return 0;}
}

四、实验结果

第12片是好芯片

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

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

相关文章

【教学类-09-06】20240401细线迷宫图01+箭头图片(A4横版一页-1份横版)

作品展示 作品展示 word模板 重点说明 代码展示 批量制作细线条的迷宫图(A4横板一面一份横版)图片加箭头图片 作者&#xff1a; 1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912 2、AI对话大师、 3、阿夏 作者&#xff1a;2024年4月3日 numint(input…

构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Servi…

2024年04月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

【面试八股总结】传输控制协议TCP(一)

一、什么是TCP协议 TCP是传输控制协议Transmission Control Protocol TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接的&#xff1a;每条TCP连接杜只能有两个端点&#xff0c;每一条TCP连接只能是点对点的&#xff08;一对一&#xff09;可靠的&#xff1a…

产品经理与产品原型

点击下载《产品经理与产品原型》 1. 前言 互联网产品经理在向技术部门递交产品策划方案时,除了详尽的需求阐述,一份清晰易懂的产品原型设计方案同样不可或缺。一份出色的原型设计,不仅能促进前期的深入讨论,更能让美工和开发人员更直观地理解产品特性,进而优化工作流程,…

Flutter iOS上架指南

本文探讨了使用Flutter开发的iOS应用能否上架&#xff0c;以及上架的具体流程。苹果提供了App Store作为正式上架渠道&#xff0c;同时也有TestFlight供开发者进行内测。合规并通过审核后&#xff0c;Flutter应用可以顺利上架。但上架过程可能存在一些挑战&#xff0c;因此可能…

NoSQL之 Redis配置

目录 关系数据库与非关系型数据库 关系型数据库&#xff1a; ●非关系型数据库 关系型数据库和非关系型数据库区别&#xff1a; &#xff08;1&#xff09;数据存储方式不同 &#xff08;2&#xff09;扩展方式不同 对事务性的支持不同 非关系型数据库产生背景 Redis简介…

Python:百度AI开放平台——OCR图像文字识别应用

一、注册百度AI开放平台 使用百度AI服务的步骤为&#xff1a; 注册&#xff1a;注册成为百度AI开放平台开发者&#xff1b;创建AI应用&#xff1a;在百度API开放平台上创建相关类型的的AI应用&#xff0c;获得AppID、API Key和Secret Key&#xff1b;调用API&#xff1a;调用…

渗透测试:数据库UDF提权(linux)

目录 开头: 1.UDF提权简介&#xff1a; 1.1共享库文件(UDF文件)指定目录&#xff1a; 版本特征&#xff1a; 操作系统版本&#xff1a; 2.靶场UDF提权复现 提权前提 1.要有一个高权限的MySQL的账号 ​编辑 2.MySQL的权限配置secure_file_priv为空 3.必须有存放UDF文件的…

抖音快手直播录屏+无水印下载视频V3.6

抖音快手直播录屏无水印下载视频更新最新版本V3.6 下载&#xff1a;https://download.csdn.net/download/m0_66047725/88978976 更多资源下载&#xff1a;关注我。

Stable Diffusion WebUI 附加功能/图片放大(Extras):单张图片/批量处理/从目录进行批量处理

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 篇文章主要讲解 Stable Diffusion WebUI 的附加功能/图片放大&#xff08;Extras&#xff09;的使用&#xff0c;主要…

[ruby on rails] ruby使用vscode做开发

ruby LSP实现 ruby插件推荐用这个来实现&#xff0c;但是现在这个在加载文件索引时候&#xff0c;特别慢&#xff0c;时好时坏&#xff0c;所以现在推荐用Solargraph实现 ruby LSP要求ruby版本3以上&#xff0c;如果在旧版本中使用&#xff0c;需要指定bundleGemfile路径 旧版…

量化交易入门(三十八)CCI指标Python实现和回测

今天我们先单纯用CCI指标来完成策略的编写&#xff0c;后续我们会改进这个策略&#xff0c;将CCI指标和前面讲到的MACD和RSI相结合来优化&#xff0c;看看我们优化后的效果会不会更好。 一、量化策略 CCI指标在量化交易中的策略&#xff1a; 在以下情况下生成买入信号&#…

预处理指令——一些比较少见的概念

前言&#xff1a;预处理是我们的c语言源代码成为可执行程序的第一个步骤。而宏和预处理指令都是在这个阶段完成。本节内容就是关于宏和预处理指令相关知识点的解析。 目录 宏 预定义符号 #define定义常量 #define定义符号 #define定义宏 带副作用的宏参数 宏的替换规则…

基于SSM的“超市管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“超市管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能设计图 首页 后台管理登录页面 采购查询管理 采购员登录…

配置 施耐德 modbusTCP 分布式IO子站 RPA0100

1. 总体步骤 2. 软件组态&#xff1a;在 Unity Pro 软件中创建编辑 PRA 模块工程 2.1 新建项目 模块箱硬件型号如下 点击 Unity Pro 软件左上方【新建】按钮&#xff0c;选择正确的 DIO 模块型号、背板型号 2.2 模块组态 2.2.1 拖拽添加模块 双击【配置】菜单下的【0&…

关于loop( ) 阻塞和非阻塞探究

一、SIR的补充 在上几篇博客中&#xff0c;有朋友私信问我&#xff0c;在ticker函数程序和中断服务程序&#xff08;ISR&#xff09;中写 物联网请求报错。怎么回事&#xff0c;在此解释。控制台如下 1.1解释 在使用 Ticker 函数和中断服务程序&#xff08;ISR&#xff09;时…

开源简单方便功能强大的Devops工具:Goploy

Goploy&#xff1a;加速您的DevOps旅程&#xff0c;拥抱无缝部署——选择Goploy&#xff0c;让您从繁琐的发布与回滚中解放出来&#xff0c;尽享高效、智能与便捷的自动化部署力量&#xff01; - 精选真开源&#xff0c;释放新价值。 概览 现在大部分流行的发布工具功能虽然强…

Leetcode-2810-故障键盘-c++

题目详见https://leetcode.cn/problems/faulty-keyboard/ 题解 这道题的关键是如何合理地使用STL&#xff0c;毕竟是一道简单题。 之前常用到的Vector容器是单向开口的连续内存空间 deque则是一种双向开口的连续线性空间&#xff0c;又称双端动态数组。所谓的双向开口&#x…

bugku-web-速度要快

发现phpsessid 从上述提示 提示发送post请求&#xff0c;并且带有参数margin 发送后发现报文头部有一个字段叫flag&#xff0c;但好像每一次flag都不一样 构建Python脚本 request requests.Session()data {margin:find, } for i in range(50):html request.post(urlhttp:/…