数列极差问题
来源:互联网 发布:2016淘宝开店教程视频 编辑:程序博客网 时间:2024/05/24 05:45
在黑板上写了n个正整数排成的一个数列,进行如下操作:每次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的记为max,最小的记作min,则该数列的极差定义位m=max-min。
问题分析:下面通过实例来认识题目中描述的计算过程。对3个具体的数据3,5,7,讨论,可能有一下3种结果:
(3*5+1)*7+1 = 113,(3*7+1)*5+1=111,(5*7+1)*3+1=109
由此可见,先运算小数据得到的是最大值,先运算大数据得到的是最小值。
C++源代码如下所示:
#include <iostream>#include <vector>#include <string>using namespace std;//计算最大值int calculateMax(vector<int> &v){ size_t sz = v.size(); if (sz == 1) { return v[0]; } vector<int>::iterator ita,itb; //每次找出v中最小的两个数*ita、*itb,然后合并成(*ita)*(*itb)+1 while (v.size() > 2) { ita = v.begin(); itb = ita +1; if (*itb < *ita) { int tmp; tmp = *ita; *ita = *itb; *itb = tmp; } for (vector<int>::iterator it = itb+1;it != v.end();++it) { if (*it < *ita) { itb = ita; ita = it; } else if (*it < *itb) { itb = it; } } *ita = (*ita)*(*itb)+1; v.erase(itb); } return v[0]*v[1]+1;}//计算最小值int calculateMin(vector<int> &v){ size_t sz = v.size(); if (sz == 1) { return v[0]; } vector<int>::iterator ita,itb; //每次找出v中最大的两个数v[i]、v[j],然后合并成v[i]*v[j]+1 while (v.size() > 2) { ita = v.begin(); itb = ita +1; if (*itb > *ita) { int tmp; tmp = *ita; *ita = *itb; *itb = tmp; } for (vector<int>::iterator it = itb+1;it != v.end();++it) { if (*it > *ita) { itb = ita; ita = it; } else if (*it > *itb) { itb = it; } } //用(*ita)*(*itb)+1代替*ita,然后将itb删除 *ita = (*ita)*(*itb)+1; v.erase(itb); } return v[0]*v[1]+1;}int main(){ vector<int> v; v.push_back(3); v.push_back(5); v.push_back(4); v.push_back(7); vector<int> v1(v); vector<int> v2(v); int max_num = calculateMax(v1); int min_num = calculateMin(v2); cout<<max_num<<'-'<<min_num<<'='<<max_num - min_num<<endl; return 0;}// 3 5 4 7
运行结果:
1 0
- HOJ1062 数列极差问题
- [hoj]数列极差问题
- 数列极差问题
- 数列极差问题
- 数列极差问题
- 数列极差问题
- Hoj 1062 数列极差问题
- 贪心法_数列极差问题
- 贪心算法-数列极差问题-JAVA
- 数列的极差问题 贪心法
- 数列极差问题(贪心) 求数据(一直Wrong)
- 贪心算法-数列极差问题(对前篇文章的修改)
- 数列极差-贪心算法
- MIPS+贪心 数列极差
- 极差问题
- 数列极差和大数模板
- O(n) 方法求数列极差
- 贪心算法基础(一)——数列极差
- JZOJ 4302【NOIP2015模拟11.3】IOIOI卡片占卜
- urllib2 cookielib
- C# OOP程序设计目录
- [HNOI2004]树的计数(prufer编码+组合数学)
- 一些概念
- 数列极差问题
- FJNUOJ1156
- 综合案例 第80课:Spark SQL网站搜索综合案例实战 以京东找出搜索平台上用户每天搜索排名5名的产品,The hottest!
- 客户端储存
- [Sicily 1090 Highways] 求最小生成树的两种算法(普里姆算法/克鲁斯卡尔算法)
- 串(链串)
- 使用CSS3实现流星雨动画教程
- “”和null的区别
- Java入门(概述篇)