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

实验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…

Ubuntu 自启动应用程序的方法

1、自启动的方法 自启动应用程序可以在/etc/rc.local文件中调用脚本来启动应用程序&#xff0c;另外也可以自行编写一个服务来启动应用程序。这两种方法其实都是一种方法即使用服务来启动一个应用程序。rc.local脚本本身也是被一个rc.local的服务来调用的。如下图&#xff0c;可…

MongoDB聚合运算符:$lt

文章目录 MongoDB聚合运算符&#xff1a;$lt语法举例 MongoDB聚合运算符&#xff1a;$lt $lt聚合运算符用于比较两个值&#xff0c;如果第一个小于第二个&#xff0c;返回true&#xff1b;如果第一个小于等于第二个&#xff0c;返回false。 语法 { $lt: [ <expression1&g…

【DevOps工具篇】LDAP GUI管理工具

【DevOps工具篇】LDAP GUI管理工具 目录 【DevOps工具篇】LDAP GUI管理工具LDAP管理工具“phpLDAPadmin”管理LDAP数据管理LDAP服务器LDAP管理工具“phpLDAPadmin”的模板功能LDAP管理工具“postLDAPadmin”LDAP管理工具“web2ldap”LDAP管理工具“ldap-ui”LDAP管理工具“go-l…

构建第一个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…

kafka面试常见问题

1、如何判断kafka某个主题消息堆积&#xff1f; 要判断Kafka中某个主题的消息是否堆积&#xff0c;可以通过查看该主题的生产者和消费者的偏移量&#xff08;offset&#xff09;差异来实现。Kafka中的每条消息在主题的分区内都有一个唯一的偏移量&#xff0c;生产者每发送一条…

【面试八股总结】传输控制协议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简介…

如何快速入门TensorFlow

要快速入门TensorFlow&#xff0c;可以按照以下步骤进行&#xff1a; 学习基本概念&#xff1a;先了解TensorFlow的基本概念&#xff0c;例如张量&#xff08;tensor&#xff09;、计算图&#xff08;computation graph&#xff09;和操作&#xff08;operation&#xff09;等。…

Mongodb中一个小巧的数据更新命令$inc

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第55篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。 $inc是一个很小巧的命令。说它小巧&#xff0c;一个是因为短&#xff0c;只有三个字符。另一个是说…

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文件的…

PHP8.3-ZTS版本安装流程以及添加扩展

下载php-8.3.x.tar.gz至服务器并解压 [rootapisix-test php-8.3.4]# wget https://www.php.net/distributions/php-8.3.4.tar.gz进入目录执行编译命令&#xff0c;必须要带 --enable-zts 才能激活zts功能 [rootapisix-test php-8.3.4]# ./configure --prefix/usr/local/p…

抖音快手直播录屏+无水印下载视频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路径 旧版…

1-31 正则表达式 String Buffer String Builder

一.作用:判断指定的String类型值 是否符合指定的规则存储的公式,正确规则表达式 二.为了避免发开中存在差异,Java提出了一些指定的字符,进行正则的编写 符号含义^行起始符 (实际开发中不常用)$行结束符(实际开发中不常用)[]表示某一个位置 , 当且仅当该位置上只有一种可能 []…