早教吧 育儿知识 作业答案 考试题库 百科 知识分享

我有一个石子合并问题但是只能做出最大值最小值求不出来谁能帮帮忙补下求最小值那段程序啊!石子合并问题:在一个圆形操场的四周摆放着n堆石子,现要将石子有次序地合并成一堆.规

题目详情
我有一个 石子合并问题 但是只能做出最大值 最小值求不出来 谁能帮帮忙补下求最小值那段程序啊!
石子合并问题:
在一个圆形操场的四周摆放着n堆石子,现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合并成一堆的最少得分和最大得分.
算法设计:对于给定n堆石子,计算合并成一堆的最小得分和最大得分.
数据输入:由文件input.txt提供输入数据.文件的第一行是正整数n,1
▼优质解答
答案和解析
我实现了一下,经验证是对的.
下面是代码:(希望能给你带来帮助.)
#include
#include
using namespace std;
static int min = 0, max = 0;//全局变量
//前视声明:
void order(int * num, int n);
void addMin(int * num, int i);
void addMax(int * num, int i, int n);
int main()
{
ifstream fin;
ofstream fout;
fin.open("input.txt");
fout.open("output.txt");
int n;
fin >> n;
int * num = new int[n];
for(int i = 0;i < n;i++)
fin >> num[i];
order(num, n);
for(i = 1;i < n;i++)//注意必须从第二个数开始遍历!
addMin(num, i);
for(i = n-2;i >= 0;i--)//注意必须从倒数第二个数开始遍历!
addMax(num, i, n);
fout
看了我有一个石子合并问题但是只能做...的网友还看了以下: