请编写意程序:将各花盆按红、黄、蓝、红、黄、蓝……的顺序排列,而且要求花盆之间的交换次数最少。

分析:交换两个变量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个。开始时排列的顺序是混乱的,如黄、红、蓝、黄、黄、蓝、黄、红、红……相关推荐

  1. 定制合成彩色光刻胶(黑色负性i-line光刻胶;红色、蓝色、黄色、紫色、绿色、黑色)

    光刻胶,又称"光致抗蚀剂",是光刻成像的承载介质,可利用光化学反应将光刻系统中经过衍射.滤波后的光信息转化为化学能量,从而把微细图形从掩模版转移到待加工基片上.其被广泛应用于光电信 ...

  2. 基于车牌颜色(仅限蓝色和黄色)的车牌定位(python+opencv实现)

    1.基于车牌颜色(仅限蓝色和黄色)的车牌定位 本文仅对蓝底白色和黄底黑色的单层车牌进行定位,其他情况类似 def colorDetect(image,option=0):name = random.r ...

  3. AIE红色/蓝色/绿色荧光聚苯乙烯微球/比色-荧光双信号ALE荧光微球的相关研究

    下面小编给大家整理了AIE红色/蓝色/绿色荧光聚苯乙烯微球/比色-荧光双信号ALE荧光微球的相关研究和制备方法,和小编一起来看! AIE红色/蓝色/绿色聚苯乙烯微球的制备: 以乙醇为分散介质,聚乙烯吡 ...

  4. 颜色以红色、品红、蓝紫色、绿/黄、蓝、桔红和青色排序

    世界颜色调查(The World Color Survey)曾发现不同人类文化中对命名颜色的顺序在全世界范围内基本一致.最近意大利的一项研究提出了一个称为类别游戏(Category Game)的理论框 ...

  5. iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)

    本文转载至 http://blog.csdn.net/fanjunxi1990/article/details/9352917 XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的, ...

  6. android mtk6592 添加led三色灯,红色蓝色绿色

    本文的led是三色的分别是红色,蓝色,绿色 红色:低电量,电量低于15% 蓝色:充电,电量在15%到90%之间 绿色:电量在90%到100% 开机充电情况: 驱动层: mediatek\custom\ ...

  7. eclipse项目上带有红色感叹号和黄色感叹号的原因

    项目上出现红色感叹号!是因为引用的jar包没找到,左击选择项目,右键以后选择最后一个,属性,打开构建路径查看库,带有红色标记的就是没找的jar包,移除重新引用即可. 黄色感叹号则是引用了但是没有用到, ...

  8. 聚苯乙烯PS彩色胶乳微球:红色/蓝色/黑色/绿色胶乳微球介绍和制备方法

    聚苯乙烯PS彩色胶乳微球,红色胶乳微球 蓝色胶乳微球 黑色胶乳微球 绿色胶乳微球等多种颜色微球粒径50nm~500nm,和小编一起来看! 单分散彩色胶乳微球(多种规格尺寸 表面修饰羧基 氨基 环氧基 ...

  9. MATLAB实现车牌识别——蓝色底/黄色底

    matlab实现简单的车牌识别 很多数学建模或者一些毕业论文都会涉及到车牌识别,这里采用MATLAB语言进行编写,较为详尽的介绍了车牌识别的两种常用方法 方法(一)--简单定位法(这是自己取的名字,这 ...

最新文章

  1. 15个相当不错的jQuery技巧
  2. array DEMO
  3. (转)扩展KMP算法模板
  4. css中图片有缩放和转动效果
  5. spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容
  6. node.js微博案例第二讲
  7. vs设计窗口不见了_碳纤维的巅峰:VS沛纳海616V3
  8. Spark中导入scalax
  9. springmvc+mongodb+maven 项目搭建配置
  10. 搭建属于自己的私有链,部署简单的智能合约
  11. pcl之将QVTKWidget添加到QtCreator
  12. RedHat 7本地yum源的配置
  13. ftp 服务器的主动模式和被动模式
  14. Atitti 类库 开发者 常用 api 目录 1.1. Meta anno注解元数据api 1 1.2. Ref 反射api 1 1.3. Database meta api 1 1.4.
  15. Python 源码剖析 目录
  16. Linux内核编译 —— 配置文件
  17. 湘源控规7.0安装 详细图文教程
  18. 电机驱动芯片效果对比
  19. jQuery 插件——免费版
  20. c语言自己走时间的程序,c语言用哪些语句能实现时间暂停?比方说按某一个键使时间暂停,再按一次使时间继续。...

热门文章

  1. java实现简易五子棋
  2. [jzoj5236]【NOIP2017模拟8.7A组】利普希茨
  3. 机器人香囊_原来这些穿古装的小孩都是假人,这些店铺都是卖香囊的
  4. PHP生成图形验证码
  5. tp6 防止XSS攻击之表单提交安全校验
  6. 区块如何防篡改_区块链为什么能防篡改?
  7. matlab 弗洛伊德算法,手写matlab的弗洛伊德算法的函数(注释很详细)
  8. PHP使用文字检索,关键词查询,分词查询
  9. 数据结构:什么是红黑树?为什么要用红黑树?
  10. 为什么团建这么招人恨