2011-11-12 69 views
1

我得到了一个任务,它没有什么特别,但我没打到这里的墙......C++最大/在一个数组分钟元素不知道数组的大小

得到算术平均后,我需要对它们进行比较和输出最高和最低的。

x是学号,vid []是算术平均值。

例如:

学生数x的算术平均值VID [I]

和任务要我输出,学生具有最高的,哪一个具有最低的手段。

我不能使用像max()和min()这样的东西的最糟糕的部分,因为我不知道总共有多少学生。另外它们都是具有相同变量名称vid []的数组。

任何帮助,将不胜感激=)

int main() 
{ 
    int mokSK=0, p1[25], p2[25], p3[25], x[25], vid[25], iv=0; 
    ifstream inFile("inFile.in"); 
    ofstream outFile("outFile.out"); 


    inFile >> mokSK; 

    for(int i=0;i<mokSK;i++) 
    { 
     inFile >> x[i] >> p1[i] >> p2[i] >> p3[i]; 
     vid[i]=(p1[i]+p2[i]+p3[i])/3; 
     outFile<< x[i] <<" " << vid[i] << endl; 
    } 

    return 0; 
} 
+2

想想看,如果你有一堆数字,你已经知道它们的最大值,那么在向集合中增加一个数字之后,你怎么能找到最大的那一堆呢? –

+0

你可以使用std :: vector,然后像这样得到最小/最大值http://stackoverflow.com/questions/182957/position-in-vector-using-stl – jbat100

回答

5

如果你想O(1)访问最大和最小等级的学生;从阅读开始,在每次阅读过程中更新您的最高和最低等级学生。

要更清楚:从执行的一开始就追踪最低和最高等级的学生,并根据需要更新每个学生数据阅读过程中的最高和最低等级学生。

+0

没有真正明白你的意思,但是不是有一些函数来比较数组而不知道ID的? – RnD

+0

认为你有n个数字,并且你知道这n个数字的最小和最大元素。如果我给你另一个号码,并要求这些n + 1号码的最小和最大元素。你如何计算我的问题的解决方案? –

-1
int main() 
{ 
    int mokSK=0, p1[25], p2[25], p3[25],x[25],vid[25],iv=0; 
    int minmean = INT_MAX; int minstud= 0;// initialize minmean and max mean with first mean 
    int maxmean = 0; int maxstud= 0; 
  ifstream inFile("inFile.in"); 
    ofstream outFile("outFile.out"); 
    inFile >> mokSK; 
  for(int i=0;i<mokSK;i++) 
    { 
    inFile >> x[i] >> p1[i] >> p2[i] >> p3[i]; 
    vid[i]=(p1[i]+p2[i]+p3[i])/3; 
    if(vid[i]>maxmean){maxmean = vid[i]; maxstud = i;} 
    if(vid[i]<minmean){minmean = vid[i]; minstud = i;} 
    // not handled if multple students have maxmean or minmean 
    outFile<< x[i] <<" " << vid[i] << endl; 
    } 

outFile << "Max mean: " << maxmean << ", student id: " << maxstud << endl; 
outFile << "Min mean: " << minmean << ", student id: " << minstud << endl; 
return 0; 
} 
+0

minmean将始终为零 –

+0

是的,你是对的:) – neagoegab

+1

在这些事情你应该总是分配混合和最大是** 0th **元素,并走阵列从** 1 **到**大小-1 ** –