#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
任何帮助都将不胜感激。
答案 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
正在计算从2
到n
,它实际上只是获得第一个索引,然后是甚至索引。 (检查结果,偶数索引100%正确:x 6 x 7 x 8 x 8 x 9 x 10
)。如果你使用每个循环的本地计数器:for(int i=2; ...
那么这个问题就不会发生了。
你的整个设计也很慢。不确定为什么你这样做,因为它可以在一次通过中轻松完成:http://ideone.com/LmD0HX
并使用<iostream>
而不是<iostream.h>
。它们实际上是不同的文件。