我的cpp程序中有一个2维数组,它存储了八列和三行的双值。我有一个函数来确定每行的最小值。现在我想改变那个最小变量的值。我是通过指针传递数组及其对我的挑战。下面是获取最小值的getMaxMin()。任何帮助都将受到赞赏。
double **getMaxMin(double **scores){
for(int i=0;i<3;i++){
double small=scores[i][0];
for(int j=1;j<8;j++){
if(small>scores[i][j]){
small=scores[i][j];
}
}
cout<<small<<endl;
}
return scores;
}
答案 0 :(得分:1)
保存small
时也保存索引:
// ...
if( small > scores[i][j] )
{
small = scores[i][j];
small_i = i;
small_j = j;
}
// later
scores[small_i][small_j] = //...
我想对于这种情况,你只需要存储列索引,因为你是逐行进行的。这是一个更通用的版本。
答案 1 :(得分:1)
int smalli,smallj;
....
if(small>scores[i][j]){
small=scores[i][j];
smalli = i;
smallj = j;
}
...
scores[smalli][smallj] = newval;
答案 2 :(得分:0)
这会回答你的问题吗?
double **getMaxMin(double **scores){
for(int i=0;i<3;i++){
double small=scores[i][0];
int best_j = 0; // NEW
for(int j=1;j<8;j++){
if(small>scores[i][j]){
small=scores[i][j];
best_j = j; // NEW
}
}
cout<<small<<endl;
scores[i][best_j] = 42.0f; // NEW
}
return scores;
}
答案 3 :(得分:0)
我可能会遗漏一些东西,但为什么要使用最小的地址并使用它来分配新值?
(注意:我可能会遗漏一些东西,但是我们已经厌倦了c ++的编码......哦,废话,今年几岁!)
double **getMaxMin(double **scores)
{
for(int i=0;i<3;i++){
double* small = &scores[i][0];
for(int j=1;j<8;j++){
if(*small>scores[i][j]){
small=&scores[i][j];
}
}
cout<<*small<<endl;
}
*small = 100.0; // Set new value here
return scores;
}
答案 4 :(得分:0)
有很多方法可以做到这一点,但一种简单的方法就是保存索引。
跟踪每行的最小值:
double **getMaxMin(double **scores){
for(int i=0;i<3;i++){
double small=scores[i][0];
int small_j = 0;
for(int j=1;j<8;j++){
if(small>scores[i][j]){
small=scores[i][j];
small_j = j;
}
}
cout<<small<<endl;
// Now you can change the value of the smallest variable for that row
//small[i][small_j] = yourvalue
}
return scores;
}
跟踪整个数组中的最小值:
double **getMaxMin(double **scores){
for(int i=0;i<3;i++){
double small=scores[i][0];
int small_j = 0;
int small_i = 0;
for(int j=1;j<8;j++){
if(small>scores[i][j]){
small=scores[i][j];
small_j = j;
small_i = i;
}
}
cout<<small<<endl;
}
// Now you can do something with the smallest value in the entire array
// small[small_i][small_j] = yourvalue
return scores;
}