C语言实例——荷兰国旗问题
C语言实例——荷兰国旗问题
问题描述:
要求重新排列一个由字符R,W,B(R代表红色,W代表白色,B代表蓝色,这都是荷兰国旗的颜色)构成的数组,使得所有的R都排在最前面,W排在其后,B排在最后。
代码示例:
#include <stdio.h>void out(char a[], int n);
void RWB(char a[], int n);int main()
{char a[6] = { 'R','W','B','R','W','B' };int an = 6;char b[5] = { 'W','R','B','B','R' };int bn = 5;RWB(a, an);RWB(b, bn);out(a, an);out(b, bn);
}void out(char a[], int n)
{int i;for (i = 0; i < n; i++) {printf("%c\t", a[i]);}printf("\n");
}void RWB(char a[], int n)
{int f, l;char x;int i = 0; f = -1, l = n;while (i != l) {if (a[i] == 'R') {f++;x = a[i];a[i] = a[f];a[f] = x;i++; }else if (a[i] == 'W') {i++;}else if (a[i] == 'B') {l--;x = a[i];a[i] = a[l];a[l] = x;}}
}
运行结果
解题思路
由题可知,拍好后的数组应该为三个区域,分别是’R’区域,‘W’区域,’B’区域。所有的‘R’都在’W’区域左边界开始左边,所有的‘B’都在’W’区域右边界开始右边。
所以,定义两个下标 f 和 l 。
f表示’W‘所在区域的最左边界,并初始化为(-1);
l表示最右边界,并初始化为(数组长度+1)
接下来只需要将’R’排在f的左边,‘B’排在l的右边。
遍历数组并判断当前元素
若元素为‘R’:让左边界(f)往右移动一个单元,将当前数组元素与左边界所指向的数组元素交换。遍历下一个数组元素。
若元素为’W‘:l与f不变,遍历下一个数组元素。
若元素为’B’:让右边界(l)往左移动一个单元,将当前数组元素与右边界所指向的数组元素交换。让索引i停留原位再次检查被交换来的数组元素。
若当前数组下标等于右边界时,排序完成。
C语言实例——荷兰国旗问题相关推荐
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
- C语言 荷兰国旗解法
/********************************************* 荷兰国旗: 1,分别定义i,j,t,i最小下标,j最大下标,t从头遍历到j的下标. 2,如果t指向的球是0 ...
- 二维数组c语言矩阵加法,C 语言实例 – 两个矩阵相加 - C 语言基础教程
C 语言实例 使用多维数组将两个矩阵相加. #include int main(){ int r, c, a[100][100], b[100][100], sum[100][100], i, j; ...
- python单链表实现荷兰国旗问题_这道荷兰旗问题,我面试时遇到三次!
01.题目示例 "荷兰国旗问题" 是计算机科学中的一个经典题目,它是由Edsger Dijkstra提出的.荷兰国旗由红.白.蓝三色组成. 荷兰国旗问题:现在有若干个红.白.蓝三种 ...
- 荷兰国旗 Flag of the Kingdom of the Netherlands
问题描述:现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫做荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列 ...
- C 语言实例 - 计算自然数的和
C 语言实例 - 计算自然数的和自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,--一个接一个,组成一个无穷的集体,即指非负整数. 实例 - 使用 for #include <std ...
- C语言实例第6期:反转字符串
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- C语言实例第5期:在控制台打印100-200之间的所有素数
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- C语言实例第4期:交换数组中最大数和最小数的位置
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- C语言实例第3期:在控制台打印出著名的杨辉三角
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
最新文章
- android view自定义
- linux内核syscall_define6,Syscall系统调用Linux内核跟踪
- 排序算法c语言和oc实现的,几种常用的排序算法,OC实现
- SDR、DDR、QDR存储器的比较
- java ls_linux ls 命令
- 深入理解分布式技术 - 消息队列使用场景
- php如何实现读取网易有道词典输出单词的xml格式并且转化为html形式
- Webservice开发之xsd文件示例代码
- 【飞秋】微软简化Visual Studio 非程序员也能开发软件
- 超好看倒计时特效单页html模板源码下载
- 【Scala】Scala的安装以及创建Scala项目的详细步骤
- Spotlight on unix 安装
- 数据库链、物化视图、高级复制方面
- Rocketmq技术分享
- 秒懂MOS管选型技巧
- 2020编程入门先学什么
- Unity shader护盾特效
- linux配置https不安全链接,配置HTTPS证书后,浏览器出现不安全提示的解决方法
- Ubuntu 使用 create_ap 开启 wifi 热点
- C++栈的初始化,入栈,出栈,获取栈顶元素等操作
热门文章
- Mac 上使用vim 快捷键
- 假设检验 python_数据清洗、假设检验
- 运行c语言程序显示已停止运行程序,c – “此应用程序已请求运行时以不寻常的方式终止它.”...
- w25qxx SPI读取数据出来为全FF
- 《码出高效:Java开发手册
- 2021年最值得推荐的5款在线文档制作工具,效率这块稳稳拿捏
- STM32 CAN波特率计算程序
- 《数据结构》算法与算法设计
- 超市商品管理系统C语言课程设计
- Doom启示录(二)------李乃峰所崇拜之 两个约翰!