#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
//类似Huffman
int max(int *a, int n)
{
priority_queue<int> q;
int i;
for(i=0; i<n; i++)
q.push(a[i]);
int data1, data2, data;
while(q.size()>=2) //一直合并下去,直到队列中只剩下一个数
{
data1 = q.top(); q.pop();
data2 = q.top(); q.pop();
data = data1 * data2 + 1;
q.push(data);
}
data = q.top();
q.pop();
return data;
}
int min(int *a, int n)
{
priority_queue<int, vector<int>, greater<int> > q;
int i;
for(i=0; i<n; i++)
q.push(a[i]);
int data1, data2, data;
while(q.size()>=2) //一直合并下去,直到队列中只剩下一个数
{
data1 = q.top(); q.pop();
data2 = q.top(); q.pop();
data = data1 * data2 + 1;
q.push(data);
}
data = q.top();
q.pop();
return data;
}
int greedy(int *a, int n, int &m)
{
int M = max(a, n) - min(a, n); //极差
int temp = M;
int count = 0; //极差位数
while(temp)
{
count++;
temp /= 10;
}
if(M == 0)
count = 1;
m = count;
return M;
}
int main()
{
ifstream fin("数列极差.txt");
cout << "输入数列长度:";
int n;
fin >> n; cout << n;
cout <<"\n输入数列:\n";
int i;
int *a = new int[n];
for(i=0; i<n; i++)
{
fin >> a[i]; cout << a[i] << " ";
}
int m;
int M = greedy(a, n, m);
cout << "\n极差位数数为:" << m << endl;
cout << "极差为:" << M << endl;
fin.close();
return 0;
}
数列极差问题
最新推荐文章于 2022-11-30 15:35:19 发布