当前位置:编程学习 > JAVA >>

求算法代码:通信系统

最近我们要构建一个通信系统。这个系统包含若干个设备,对于每个设备,我们都可以从不同的商家购买。从不同商家购买的同种设备,在最大带宽和价格上都有所区别。
整个系统的带宽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相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,