有3n个花盆,红色、蓝色和黄色的各n个。开始时排列的顺序是混乱的,如黄、红、蓝、黄、黄、蓝、黄、红、红……
请编写意程序:将各花盆按红、黄、蓝、红、黄、蓝……的顺序排列,而且要求花盆之间的交换次数最少。
分析:交换两个变量A、B的值徐需要交换3次,交换3个变量的值需要交换4次。
实现要点:实现中并不用专门统计交换次数,而是将3n个数据存储在n*3的二维数组空间中,这样第一列应放红花盆、第二列应该放黄花盆、第三列应该放蓝花盆。程序由直接交换(一次直接交换需要交换3次)和循环交换(一次循环交换需要交换4次)两部分组成。
程序中红、黄、蓝花分别用数字1、2、3表示
源代码:
#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<vector<int>> v;vector<int> v_tmp(3);/*cout<<v_tmp.size();*/int tmp=0;//红、蓝、黄色的花各n个int n;//总交换次数int m = 0;cout<<"请输入n(红、蓝、黄色各n个):"<<endl;cin>>n;for (int i=0;i<n;++i){for (int j=0;j<3;++j){cin>>tmp;v_tmp[j] = tmp;}v.push_back(v_tmp);}//下面来处理两两直接交换的情况,这种情况需要交换3次for (int i=0;i<n;++i){if (2 == v[i][0])//该放红花的地方放了黄花{for (int j=0;j<n;++j){if (1 == v[j][1])//该放黄花的地方放了红花{tmp = v[i][0];v[i][0] = v[j][1];v[j][1] = tmp;m += 3;break;}}}if (3 == v[i][0])//该放红花的地方放了蓝花{for (int j=0;j<n;++j){if (1 == v[j][2])//该放蓝花的地方放了红花{tmp = v[i][0];v[i][0] = v[j][2];v[j][2] = tmp;m += 3;break;}}}if (3 == v[i][1])//该放黄花的地方放了蓝花{for (int j=0;j<n;++j){if (2 == v[j][2])//该放蓝花的地方放了黄花{tmp = v[i][1];v[i][1] = v[j][2];v[j][2] = tmp;m += 3;break;}}}}//下面来处理3换盆循环相互放错的情况,这种情况需要交换4次for (int i=0;i<n;++i){//该放红的地方放了黄,该放黄的地方放了蓝,该放蓝的地方放了红if (2 == v[i][0]){for (int j=0;j<n;++j){if (3 == v[j][1]){for (int k=0;k<n;++k){if (1 == v[k][2]){tmp = v[i][0];v[i][0] = v[k][2];v[k][2] = v[j][1];v[j][1] = tmp;m += 4;break;}}}}}//该放红的地方放了蓝,该放黄的地方放了红,该放蓝的地方放了黄if (3 == v[i][0]){for (int j=0;j<n;++j){if (1 == v[j][1]){for (int k=0;k<n;++k){if (2 == v[k][2]){tmp = v[i][0];v[i][0] = v[j][1];v[j][1] = v[k][2];v[k][0] = tmp;m += 4;break;}}}}}}cout<<"交换后:"<<endl;for(int i=0;i<n;++i){for (int j=0;j<3;++j){cout<<v[i][j]<<'\t';}cout<<endl;}cout<<"最少交换次数:"<<m<<endl;return 0;
}//2 1 3 2 2 3 2 1 1 2 3 1 2 1 2 3 3 1 1 1 2 3 3 2 2 1 1 3 3 3
运行结果:
有3n个花盆,红色、蓝色和黄色的各n个。开始时排列的顺序是混乱的,如黄、红、蓝、黄、黄、蓝、黄、红、红……相关推荐
- 定制合成彩色光刻胶(黑色负性i-line光刻胶;红色、蓝色、黄色、紫色、绿色、黑色)
光刻胶,又称"光致抗蚀剂",是光刻成像的承载介质,可利用光化学反应将光刻系统中经过衍射.滤波后的光信息转化为化学能量,从而把微细图形从掩模版转移到待加工基片上.其被广泛应用于光电信 ...
- 基于车牌颜色(仅限蓝色和黄色)的车牌定位(python+opencv实现)
1.基于车牌颜色(仅限蓝色和黄色)的车牌定位 本文仅对蓝底白色和黄底黑色的单层车牌进行定位,其他情况类似 def colorDetect(image,option=0):name = random.r ...
- AIE红色/蓝色/绿色荧光聚苯乙烯微球/比色-荧光双信号ALE荧光微球的相关研究
下面小编给大家整理了AIE红色/蓝色/绿色荧光聚苯乙烯微球/比色-荧光双信号ALE荧光微球的相关研究和制备方法,和小编一起来看! AIE红色/蓝色/绿色聚苯乙烯微球的制备: 以乙醇为分散介质,聚乙烯吡 ...
- 颜色以红色、品红、蓝紫色、绿/黄、蓝、桔红和青色排序
世界颜色调查(The World Color Survey)曾发现不同人类文化中对命名颜色的顺序在全世界范围内基本一致.最近意大利的一项研究提出了一个称为类别游戏(Category Game)的理论框 ...
- iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)
本文转载至 http://blog.csdn.net/fanjunxi1990/article/details/9352917 XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的, ...
- android mtk6592 添加led三色灯,红色蓝色绿色
本文的led是三色的分别是红色,蓝色,绿色 红色:低电量,电量低于15% 蓝色:充电,电量在15%到90%之间 绿色:电量在90%到100% 开机充电情况: 驱动层: mediatek\custom\ ...
- eclipse项目上带有红色感叹号和黄色感叹号的原因
项目上出现红色感叹号!是因为引用的jar包没找到,左击选择项目,右键以后选择最后一个,属性,打开构建路径查看库,带有红色标记的就是没找的jar包,移除重新引用即可. 黄色感叹号则是引用了但是没有用到, ...
- 聚苯乙烯PS彩色胶乳微球:红色/蓝色/黑色/绿色胶乳微球介绍和制备方法
聚苯乙烯PS彩色胶乳微球,红色胶乳微球 蓝色胶乳微球 黑色胶乳微球 绿色胶乳微球等多种颜色微球粒径50nm~500nm,和小编一起来看! 单分散彩色胶乳微球(多种规格尺寸 表面修饰羧基 氨基 环氧基 ...
- MATLAB实现车牌识别——蓝色底/黄色底
matlab实现简单的车牌识别 很多数学建模或者一些毕业论文都会涉及到车牌识别,这里采用MATLAB语言进行编写,较为详尽的介绍了车牌识别的两种常用方法 方法(一)--简单定位法(这是自己取的名字,这 ...
最新文章
- 15个相当不错的jQuery技巧
- array DEMO
- (转)扩展KMP算法模板
- css中图片有缩放和转动效果
- spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容
- node.js微博案例第二讲
- vs设计窗口不见了_碳纤维的巅峰:VS沛纳海616V3
- Spark中导入scalax
- springmvc+mongodb+maven 项目搭建配置
- 搭建属于自己的私有链,部署简单的智能合约
- pcl之将QVTKWidget添加到QtCreator
- RedHat 7本地yum源的配置
- ftp 服务器的主动模式和被动模式
- Atitti 类库 开发者 常用 api 目录 1.1. Meta anno注解元数据api	1 1.2. Ref 反射api	1 1.3. Database meta api	1 1.4.
- Python 源码剖析 目录
- Linux内核编译 —— 配置文件
- 湘源控规7.0安装 详细图文教程
- 电机驱动芯片效果对比
- jQuery 插件——免费版
- c语言自己走时间的程序,c语言用哪些语句能实现时间暂停?比方说按某一个键使时间暂停,再按一次使时间继续。...