求算法代码:通信系统
最近我们要构建一个通信系统。这个系统包含若干个设备,对于每个设备,我们都可以从不同的商家购买。从不同商家购买的同种设备,在最大带宽和价格上都有所区别。整个系统的带宽B是指它包含的所有设备的最大带宽的最小值。整个系统的代价P是指,它包含的所有设备的价格之和。我们的目标是确定一个购买方案,使得整个系统的性价比B/P最高。
输入
输入包含多行。第1行为n(1<=n<=100)表示系统包含的设备数,接下来的n行格式是这样的,第i+1(1<=i<=n)行的第1个数为mi(1<=mi<=100),表示提供第i种设备的商家数,接下来在这一行内便是mi对个正整数,分别表示对应商家提供的此种商品的最大带宽和价格。
输出
输出为一行,是一个3位浮点小数B/P即最优购买方案下系统的最优性价比。
输入样例
3
3 100 25 150 35 80 25
2 120 80 155 40
2 100 100 120 110
输出样例
0.649 c、c++、java、算法 --------------------编程问答-------------------- #include <iostream>
#include <iostream>
using namespace std;
class Node
{
public:
float brandwidth;
float price;
Node(float,float);
Node()
{
brandwidth=0;
price=0;
}
};
int main()
{
int Faci_Number;
int *Sup_Number;
Node *arraytemp;
Node **array;
cout << "Input the number of facilities" << endl;
cin>>Faci_Number;
array=new Node*[Faci_Number+1];
Sup_Number=new int[Faci_Number+1];
for(int i=1; i<=Faci_Number; i++)
{
cout<<"the number of"<<i<<"facility's supplier"<<endl;
cin>>Sup_Number[i];
array[i]=new Node[Sup_Number[i]+1];
for(int j=1; j<=Sup_Number[i]; j++)
{
cin>>array[i][j].brandwidth>>array[i][j].price;
}
}
arraytemp =new Node[Faci_Number];
for(int i=1; i<=Faci_Number;i++)
for(int j=1;j<=Sup_Number[i];j++)
{
if(array[i][j].brandwidth/array[i][j].price<=array[i][j+1].brandwidth/array[i][j+1].price)
{
arraytemp[i].brandwidth=array[i][j+1].brandwidth;
arraytemp[i].price=array[i][j+1].price;
cout<<arraytemp[i].brandwidth<<endl;
cout<<arraytemp[i].price<<endl;
}
}
float countp=0;
float minb=arraytemp[1].brandwidth;
for(int i=1; i<=Faci_Number;i++)
{
cout<<arraytemp[i].brandwidth<<endl;
cout<<arraytemp[i].price<<endl;
countp+= arraytemp[i].price;
if(minb>=arraytemp[i].brandwidth)
{
minb=arraytemp[i].brandwidth;
}
}
cout<<minb<<endl;
cout<<countp<<endl;
cout<<minb/countp<<endl;
return 0;
}
补充:Java , Java相关