题目不难,考察数组的基本知识,因此,我就掉坑里了,基础知识不扎实。
我的各种解法出现了各种问题:
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)时,需要定义数组的大小,防止越界!
总之,注意细节!!!!