用c++语言编程,用数组存放10个数,编写程序求这个10个中最大值及其所在的下标.

如题所述

#include <iostream>
using namespace std;

int main()
{
int arr[10] = {2,3,4,1,5,11,0,6,7,8};
int pos = 0 , max = arr[0] ;

for(int i = 1;i<10;i++)
{
if(max<arr[i])
{
max = arr[i];
pos = i;
}
}

cout<<"MAX:"<<max<<endl;
cout<<"坐标:"<<pos<<endl;//注意坐标是从0开始的

return 0;
}


////////////////////////////////////////////////////////////////
//这个是考虑会出现多个最大值的情况
////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;


void initPosArr(int arr[],int arrMax)//数组初始化
{
for (int i=0;i<arrMax;i++)
{
arr[i] = -1;//坐标为-1
}
}

int main()
{
int arr[10] = {2,3,11,1,5,11,0,6,7,8};
int pos = 0 , max = arr[0] , posArr[10];//posArr为存储多个相同最大坐标的数组
initPosArr(posArr,10);
bool bRet = false;
for(int i = 1;i<10;i++)
{
if(max<arr[i])//出现新的最大值,坐标数组初始化,第一个元素保存该最大数的坐标
{
max = arr[i];
pos = i;

bRet = false;
initPosArr(posArr,10);
posArr[0] = pos;
}
else if(max==arr[i]&&bRet==false)//第一次出现相同最大值
{

bRet = true;
pos = i;
cout<<pos<<endl;
posArr[1] = pos;
}
else if(max==arr[i]&&bRet==true)//出现多个最大数的情况
{
pos = i;
for (int j = 0;j<10;j++)
{
if (posArr[j]==-1)
{
posArr[j]=pos;
}
}
}
}

cout<<"MAX:"<<max<<endl;
for (int m = 0;m<10;m++)
{
if (posArr[m]!=-1)
{
cout<<"坐标:"<<posArr[m]<<endl;
}
else
{
break;
}
}

return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-10
#include <iostream>
using namespace std;

int MaxVal(const int *pBeg,const int *pEnd,int &iMax)
{
 const int *pTmp = pBeg;
 int iTmp = *pBeg;
 int index = 0;
 ++pBeg;
 while(pBeg != pEnd)
 {
  if(*pBeg > iTmp)
  {
   iTmp = *pBeg;
   index = pBeg - pTmp;
  }
  
  ++pBeg;
 } 
 iMax = iTmp;
 return index;
}

int main(void)
{
 int iTmp[10] = {12,3,4,5,6,7,9,22,3,8};
 int iMax = 0;
 int index = MaxVal(iTmp,iTmp+10,iMax);
 cout << "The Max Value is:" << iMax << " index is:" << index << endl;
 getchar();
 return 0;
}

相似回答