本题目要求读入n个浮点数(float就够用了),然后对它们进行排序。再输入num个整数,要求输出排序后相应下标的值。
输入格式:
输入一个整数n(n<1000000),再输入n个浮点数。
然后输入一个整数num(num < 1000000),最后依次输入num个整数。
输出格式:
针对num个整数中的每一个整数,输出排序后对应下标的值。如果下标越界,则输出-1.
输入样例:
例如:
5
0.3 0.21 0.678 0.215 0.333
2
5
3
输出样例:
在这里给出相应的输出。例如:
-1
0.333
大家要先读懂题,只是对浮点数排序,输入的整数是作为下标,输出对应的浮点数,如果越界就输出-1
先说错误思路:
我想用两个数组分别存储输入的浮点数和整数,再比较出结果,但是答案始终对不上,估计是数组越界问题,确实麻烦了,错误代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,N;
cin>>n;
float ch1[1000000];
for(int i=0;i<n;i++)
{
cin>>ch1[i];
}
cin>>N;
int ch2[1000000];
for(int i=0;i<N;i++)
{
cin>>ch2[i];
}
sort(ch1,ch1+n,less<float>());
for(int i=0;i<N;i++)
{
if(ch2[i]>=n)
{
cout<<"-1"<<endl;
}
else {cout<<ch1[ch2[i]]<<endl;}
}
return 0;
}
思考了下发现整数根本就没有存储的必要,直接拿来用就是了,所以修改了下,结果也就正确了
正确代码如下:
#include <iostream>
#include <algorithm> //一会儿要调用sort函数排序用
using namespace std;
int main()
{
int n,N,k;
float ch[1000000]; //定义一个足够大的数组储存浮点数
cin>>n;
for(int i=0;i<n;i++)
{
cin>>ch[i];
}
sort(ch,ch+n,less<float>()); //sort函数排序,sort函数的三个参数(数组首地址,数组末地址的下一个地址,比较方法)
//比较方法可以不写,不写默认从小到大,写的话,从小到大是less<数据类型>,从大到小是greater<数据类型>
cin>>N;
for(int i=0;i<N;i++)
{
cin>>k; //输入的整数
if(k<=n-1&&k>=0)
{
cout<<ch[k]<<endl;
}
else{
cout<<-1<<endl;
}
}
return 0;
}