c语言解三色旗问题加注释,三色旗问题(Three
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
问题描述
三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为Dutch Nation Flag(Dijkstra是荷兰人),而多数作者则使用Three-Color Flag 来称之。
假设有一根绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子并没有顺序,现在需要将它们分类,并排列为蓝红白的顺序,要如何移动次数才会最少,注意您只能在绳子上进行此动作,并且一次只能调换两个旗子。
解题思路
本题就相当于对一堆旗子进行分类,前提是在一条绳子上,分类的结果就是绳子分为三部分,分别为红白蓝三种颜色。这个问题让我想起了快排时用到的partition算法,就是将数分为两类,左边比x小,右边比x大。这里也可以用类似的方法,就是将整个数组分为三大块,维护三个下标就可以了。
算法描述:
用B,W,R三个下标作为标签分类,B=W=0,R=n-1,当w>R结束。若w为白色,w++;
若w为蓝色,交换W与B处的值,w++,B++;
若W为红色,交换W与R处的值,W不变,R—;
注意:W始终为待处理的旗子,B始终是蓝色旗子最后一个的下一个,即白色旗子 的第一个,R始终为从右边数完所有处理完的红色旗子后的第一个未处理的旗子。
代码实现#include
using namespace std;
#define swap(t,x,y){t _z;_z=y;y=x;x=_z;}
void Sequence(char *a,int n){
int num=0; //step
int low=0,mid=0,high=n-1;
while(mid<=high){
if(a[mid]=='W')
mid++;
else if(a[mid]=='B'){
swap(char,a[mid],a[low]);
mid++;low++;num++; //a[low] has been checked, mid++
}
else{
swap(char,a[mid],a[high]);
num++;high--; //a[high] has not been checked
}
}
cout<2?" steps":" step")<
}
int main(){
char a[10]={'W','B','B','R','R','W','R','B','W','B'};
Sequence(a,10);
for(int i=0;i<10;i++)
cout<
return 0;
}
c语言解三色旗问题加注释,三色旗问题(Three相关推荐
- 用1602液晶显示秒表功能 c语言编写程序 单片机 加注释,1602LCD液晶显示秒表
1602LCD液晶显示秒表 [源程序:] ;------------------------------------------------------------------ ; ME30 ...
- 用1602液晶显示秒表功能 c语言编写程序 单片机 加注释,单片机课程设计--1602LCD显示的秒表.doc...
单片机课程设计 题目: 1602LCD显示的秒表 系别/班级:信息工程系11级嵌入式技术与应用专业 小组成员: 小组成员学号: 指导老师: 目录 1 单片机原理-------------------3 ...
- 强悍的 vim —— 删除空行、删除注释以及加注释解注释
1. 删除空行 空行的构成比较复杂 (1)删除没有内容的空白行 :g/^$/d (2)删除包含空格(%s)的空白行 :g/^%s*$/d 2. 删除注释 :%s/^#.*$//g 如果某些行以若干空格 ...
- idea中自定义修改jdk源码,加注释
前言 最近打算出jdk源码的博客,想在源码基础上加注释,在此把方法分享给大家. 处理方法 打开project structures,选择sdk. 根据上方的路径,找到zip包,进行解压. 然后删除掉z ...
- java 注释 超链接_java_Java代码注释规范详解,代码附有注释对程序开发者来 - phpStudy...
Java代码注释规范详解 代码附有注释对程序开发者来说非常重要,随着技术的发展,在项目开发过程中,必须要求程序员写好代码注释,这样有利于代码后续的编写和使用. 基本的要求: 1.注释形式统一 在整个应 ...
- android系统加载主题的流程,详解Android布局加载流程源码
一.首先看布局层次 看这么几张图 我们会发现DecorView里面包裹的内容可能会随着不同的情况而变化,但是在Decor之前的层次关系都是固定的.即Activity包裹PhoneWindow,Phon ...
- mysql建表语句增加注释_mysql建表语句加注释
主表的名称+字符 dtl(detail 缩写) 例如: 采购定单的名称为: po_order, 则采购定单的明细表为: po_orderdtl (7)表必须填写描述信息(使用 SQL 语句建表时... ...
- 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解
天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...
- pat真题1002 写出这个数C语言解法和java解法
pat真题1002 写出这个数C语言解法和java解法 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这 ...
- 怎样用c语言编程解多元方程组,C语言解多元一次方程组(矩阵法)
C语言解多元一次方程组(矩阵法) 发布时间:2016年06月08日 评论数:抢沙发 阅读数:2560 #include #include #define Han 200//(可自设)多元一次方程组有n ...
最新文章
- 管理学中的知名定律之阿尔巴德定理
- Netty HTTP on Android
- 罪人我举起酒杯的飞鸽传书
- c++ 0x8000ffff灾难性故障_电容器毁灭性故障,让PCB板直接报废!
- 结对编程后传之做汉堡
- qt的qfiledialog怎么判断打开的是不是一张图片_花瓣网画板图片一键导出 设计师速来围观...
- 63. (FileInputStream)输入字节流
- 用计算机探索ppt,《用计算器探索规律 2》ppt课件.ppt
- 这次,python将带你自动爬取B站CXK的NBA形象大使的全部鬼畜视频
- 关闭浏览器自动退出账号
- 简约好看的绚丽彩虹同学录V1.4源码
- 安卓辅助功能获取控件id
- Ins运营五大技巧总结
- 《Modelica教程》by Fritzson 导言部分
- 数据库管理之数据库的恢复
- 小鲲Python嘎嘎炫~day2
- 基于边缘计算网关的PLC设备远程监控系统
- Python中的long类型
- R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1
- 电脑入米家,让小爱同学随意操控电脑开关机(需主机或软路由)
热门文章
- 分散层叠(Fractional Cascading)
- 内网渗透-内网穿透猕猴桃抓密码提权烂土豆提权
- God.org单域环境攻略(一)
- ios微信分享失效,不支持history.pushState方法
- MySQL压缩包下载及解压安装
- 小米电视android刷机,小米电视刷机经历
- 云桌面虚拟化VDI、IDV、VOI三种主流架构的区别?
- idv和vdi的优劣势_IDV和VDI区别
- 目标检测:YOLO You Only Look Once
- PX Deq Credit: send blkd (3)---Script to monitor parallel queries (文档 ID 45