将数组中的每个数字替换为该点之前的最大数字

Replacing each number within an array with the maximum number up to that point

本文关键字:数字 替换 数组      更新时间:2023-10-16
#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

任何协助将不胜感激。

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