0
点赞
收藏
分享

微信扫一扫

HJ58 输入n个整数,输出其中最小的k个

今天你读书了吗 2022-03-11 阅读 97

题目不难,考察数组的基本知识,因此,我就掉坑里了,基础知识不扎实。

我的各种解法出现了各种问题:

1 多组输入问题

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    int m;
    int r;
    int i=0;
    vector<int>v;
    cin>>n>>m;
    while(n--)
    {
        cin>>r;
        v.push_back(r);
    }
    sort(v.begin(),v.end());
    while(m--)
    {
        
        cout<<v[i]<<" ";
        i++;
    }
    return 0;
}

因为还不太习惯这种cin双输入问题,所以总是容易写成单输入问题;

2 局部变量与全局变量

int main()
{
    int n;
    int m;
    int r;
    int i=0;
    vector<int>v;
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
        {
            cin>>r;
            v.push_back(r);
        }
        sort(v.begin(),v.end());
        while(m--)
        {
            cout<<v[i]<<" ";
            i++;
        }
    }
    return 0;
}

1中也出现了 这个问题,打印的时候,对输出 v[i]中的 i 要设置成局部变量,不然多组输入会出错。

3 数组的插入问题

int main()
{
    int n;
    int m;
    
    while (cin >> n >> m)
    {
        vector<int>v;
        for (int i = 0; i < n; i++)
        {
           cin>>v.at(i);//cin>>v[i];
        }
        sort(v.begin(), v.end());
        int j=0;
        while(m--)
        {
          cout <<v[j]<<" ";
           j++;
         
        }
        cout << endl;
    }
    return 0;
}

答案提示访问越界 溢出等问题,经过调试 问题出现在 v在定义时没有给与一定的空间大小,因此报错。

改为:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    int m;
    
    while (cin >> n >> m)
    {
        vector<int>v(n);
        for (int i = 0; i < n; i++)
        {
           cin>>v.at(i);
        }
        sort(v.begin(), v.end());
        int j=0;
        while(m--)
        {
          cout <<v[j]<<" ";
           j++;
         
        }
        cout << endl;
    }
    return 0;
}

总结:

1. 注意全局变量问题;

2.容器插入可以用 v.push_back(),使用v[i]/v.at(i)时,需要定义数组的大小,防止越界!

总之,注意细节!!!!

举报

相关推荐

0 条评论