PTA---7-1 海量浮点数排序

本题目要求读入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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值