我正在使用C ++进行一项任务,而且我已经被困在同一时间了几天,我知道我忽视了一些事情,但我不知道它是什么。
问题是:
m 狗在 n 类别中竞争,每个都获得0到10之间的分数。绝对冠军狗(总得分最多的那个)有多少类别?赢了吗?
我应该使用计算中的简单方法,例如:最大搜索,线性搜索,对数搜索,计数,数组求和,等。所以我不能使用max(a, b)
或类似的东西。
我的程序目前按以下方式构建:
有一个求和函数,它将矢量作为输入并告诉我总和
一个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
答案 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)
返回该列中具有最大值的行。