查找一行有多少个最大列值

时间:2013-05-07 18:19:38

标签: c++ algorithm

我正在使用C ++进行一项任务,而且我已经被困在同一时间了几天,我知道我忽视了一些事情,但我不知道它是什么。

问题是:

  

m 狗在 n 类别中竞争,每个都获得0到10之间的分数。绝对冠军狗(总得分最多的那个)有多少类别?赢了吗?

我应该使用计算中的简单方法,例如:最大搜索,线性搜索,对数搜索,计数,数组求和,。所以我不能使用max(a, b)或类似的东西。

我的程序目前按以下方式构建:

  1. 有一个求和函数,它将矢量作为输入并告诉我总和

  2. 一个MaxSearch函数,它将整个矩阵作为输入,然后使用求和矩阵查找具有最大点的行(这将是绝对赢家狗的行索引)

    < / LI>

    然后我尝试了多个不同的选项从这里继续但没有一个工作,这里是我到目前为止使用的函数,'mat'是我从文件或控制台获得的输入矩阵:

    int ArraySum(const vector<int>& z)
    {
        int s=0;
        for(unsigned i=0; i<z.size(); i++) s+=z[i];
        return s;
    }
    
    
    int MaxRow(const vector<vector <int> >& mat)throw(Range_Error)
    {
        if(mat.size()==0) throw EmptyRange;
        int maxrow=ArraySum(mat[0]);
        int ind=0;
        for(unsigned i=1; i<mat.size();++i){
        int s=ArraySum(mat[i]);
        if(s>maxrow){
            maxrow=s;
            ind=i;}
        }
        return ind;
    }
    
    //And this is where I am stuck
    

1 个答案:

答案 0 :(得分:0)

我希望我已经理解了这个问题。更少的单词和更多的代码:

int MaxValueRow(const vector<vector <int> >& mat, int col)
{
  int m = math.size();
  int ind = 0;
  int maxPoints = mat[0][col];

  for (int r = 1; r < m; r++) {
    if (mat[r][col] > maxPoints) {
      maxPoints = mat[r][col];
      ind = r;
    }
  }

  return ind; // The correct return value is ind
}

int CountWins(const vector<vector <int> >& mat)
{
  int winnerRow =  MaxRow(mat);
  int count = 0;

  int n = mat[0].size();
  for (i = 0; i < n; i++) {
    if (MaxValueRow(i) == winnerRow)
      count++;
  }

  return count;
}

MaxValueRow(col)返回该列中具有最大值的行。