您的位置:首页 > 其它

数列极差问题

2015-11-23 21:11 253 查看
#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
;
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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: