我有两个数组:
int playerSums[9] = { };
string playerNames[9] = { };我正在尝试获取数组中的最小值,以及该值的数组索引。
到目前为止,我尝试过的是:
if (playerNames[index] == "End" || playerNames[index] == "end") {
int lowestValue = playerSums[0];
for (i = 1; i < sizeof(playerSums) / sizeof(playerSums[0]); i++) {
if (playerSums[i] < lowestValue || lowestValue != 0)
lowestValue = playerSums[i];
}
cout << index[playerNames] << " had the lowest values and got the sum ";
cout << lowestValue << endl;
}如何在数组playerSums中找到和显示最小值(例如,只播放3名播放器,即只填充数组的3个元素(其余元素等于0)?
我需要索引来显示得到最小值的球员的名字。
发布于 2014-10-02 17:53:08
您可以使用标头std::min_element中声明的标准算法<algorithm>来用最小和查找元素。例如
#include <algorithm>
int *min = std::min_element( playerSums, playerSums + 3 );
std::cout << playerNames[min - playerSums]
<< " had the lowest values and got the sum " << *min
<< std::endl;也可以使用标头中声明的标准函数std::begin、std::end和std::distance编写。
#include <algorithm>
#include <iterator>
int *min = std::min_element( std::begin( playerSums ), std::end( playerSums ) );
std::cout << playerNames[ std::distance( playerSums, min )]
<< " had the lowest values and got the sum " << *min
<< std::endl;您可以编写类似于该算法的函数,而不是使用该算法。例如
size_t min_sum( const int playerSums[], size_t n )
{
size_t min = 0;
for ( size_t i = 1; i < n; i++ )
{
if ( playerSums[min] < playerSums[i] ) min = i;
}
return min;
}
size_t min = min_sum( playerSums, sizeof( playerSums ) / sizeof( *playerSums ) );
std::cout << playerNames[min]
<< " had the lowest values and got the sum " << playerSums[min]
<< std::endl;如果需要跳过等于零的数组元素,则该函数如下所示
size_t min_sum( const int playerSums[], size_t n )
{
size_t min = 0;
while ( min < n && playerSums[i] == 0 ) ++min;
for ( size_t i = min; i < n; i++ )
{
if ( playerSums[min] < playerSums[i] ) min = i;
}
return min;
}
size_t min = min_sum( playerSums, sizeof( playerSums ) / sizeof( *playerSums ) );
if ( min != sizeof( playerSums ) / sizeof( *playerSums ) )
{
std::cout << playerNames[min]
<< " had the lowest values and got the sum " << playerSums[min]
<< std::endl;
}https://stackoverflow.com/questions/26166337
复制相似问题