在C 中增加数组大小



我有项目,这是我的代码。我期望我编写一个控制台应用程序,该应用程序在给定文件中找到最大的k数,并按降序打印这些最大的K数字。我的程序应将文件名和k作为用户的输入参数。

例如,以下文件内容:

3, 5, 12, 54, 12, 3, 654, 11, 46, 7, 3

k = 3的输出应为:

654 54 46

using namespace std;

int main() {
    int i, size, p, maxim, k, n, j;
    int* a = new int[7000000];
    size = 7000000;
    ifstream file("7_million_numbers.txt");
    if (file.is_open())
    {
        for (i = 0; i < size; i = i + 1) 
            file >> a[i];
    }
    cout << "Enter the number: " << endl;
    cin >> n;
    for (j = 1; j < n; j = j + 1) {
        for (k = 0; k < size - 1; k++) {
            maxim = a[k];
            p = k;
            for (i = k + 1; i < size; i++)
                if (a[i] > maxim) {
                    maxim = a[i];
                    p = i;
                }
            a[p] = a[k];
            a[k] = maxim;
        }
    }
    for (i = 0; i < n; i++)
        cout << a[i] << " " << endl;
    system("pause");
    delete[] a;
    return 0;
}

此代码不起作用。我有" .exe停止工作"问题。是因为数组尺寸吗?因为正在读取程序的文本文件具有700万个数字。

我对您的问题有一个非常简单的解决方案,您可以在降序之前按降序对给定的数字进行排序最大的数字要显示"

而不是int使它长时间

int main() {
int i, size, p, maxim, k, n, j;
long int* a = new long int[7000000];
size = 7000000;
ifstream file("7_million_numbers.txt");
if (file.is_open())
{
    for (i = 0; i < size; i = i + 1) 
        file >> a[i];
}
cout << "Enter the number: " << endl;
cin >> n;
for(j=0;j<size;j++){
    for(k=j;k<size;k++){
         if(a[j]<a[k]){
            int temp;
            temp = a[j];
            a[j] = a[k];
            a[k] = temp;
         }
    }
}
for (i = 0; i < n; i++)
    cout << a[i] << " " << endl;
system("pause");
delete[] a;
return 0;

}

在我看来,您每次运行只做一个查找。我认为您不需要仅将所有数字存储在内存中最大。为此,set<int>可以很好地工作:

void FindKthLargest( istream& fileIn , ostream& userOut, istream& userIn )
{
    int k = 0;
    userOut << "Enter the k number: ";
    userIn >> k;
    set<int> largetNums;
    int temp = 0;
    for ( int i = 0; i < k; i++ )
    {
        if ( fileIn >> temp )
        {
            largetNums.emplace( temp );
        }
        else
        {
            userOut << "Number is too bign";
            return;
        }
    }
    while ( fileIn >> temp )
    {
        set<int>::iterator lowest = largetNums.begin();
        if ( temp > *lowest )
        {
            largetNums.emplace( temp );
            largetNums.erase( lowest );
        }
    }
    for ( auto i : largetNums )
    {
        userOut << i;
    }
}

最新更新