0

我正在使用 C++ 进行作业,并且我已经在同一点上停留了好几天,我知道我忽略了一些东西,但我不知道它是什么。

问题是:

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

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

我的程序目前的结构如下:

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

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

然后我尝试了多种不同的选项从这里继续,但它们都不起作用,这是我到目前为止使用的函数,“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
4

1 回答 1

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;
}

WhereMaxValueRow(col)返回在该列具有最大值的行。

于 2013-05-07T18:53:41.260 回答