用最大数量替换数组中的每个数字

时间:2013-06-06 00:24:30

标签: c++ arrays mingw

#include<iostream.h>
#include<fstream.h>
ifstream f("date.in");
using namespace std;
int i;
int P(int a[100],int k,int max)
{
    max=a[1];
    for(i=2;i<=k;i++)
            if(a[i]>max)
               max=a[i];
    return max;
}
int main()
{
    int x,a[100],n;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    for(i=2;i<=n;i++)
        a[i]=P(a,i,x);
    for(i=1;i<=n;i++)
        cout<<a[i]<<" ";
}

我的“date.in”文件包含以下内容:

12

4 6 3 7 8 1 6 2 7 9 10 8

如标题所述,程序应该从文件中修改数组,使得每个数字具有在数组中找到的最大值,包括相应数字的位置。我已经完成了一百次,但无法弄清楚我的代码有什么问题。

编译时,我得到以下内容:

4 6 3 7 8 8 6 8 7 9 10 10

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

int i;

全球通常是一个坏主意。因为这个循环:

for(i=2;i<=n;i++)
    a[i]=P(a,i,x);

和这个循环:

for(i=2;i<=k;i++)
        if(a[i]>max)
           max=a[i];

正在“同时”运行,因此第一个i正在计算从2n,它实际上只是获得第一个索引,然后是甚至索引。 (检查结果,偶数索引100%正确:x 6 x 7 x 8 x 8 x 9 x 10)。如果你使用每个循环的本地计数器:for(int i=2; ...那么这个问题就不会发生了。

你的整个设计也很慢。不确定为什么你这样做,因为它可以在一次通过中轻松完成:http://ideone.com/LmD0HX 并使用<iostream>而不是<iostream.h>。它们实际上是不同的文件。