-1
#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

任何援助将不胜感激。

4

1 回答 1

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>。它们实际上是不同的文件。

于 2013-06-06T00:30:16.870 回答