数据排序 C++

题目 2973: 出现次数超过一半的数

#include<iostream>
using namespace std;
int main()
{
    int n,a[1005],b[1005],ch=0;
    double av;
    cin>>n;
    av=(double)n/2.0;
    //cout<<av<<endl;用于测试数组的一半是整数还是浮点数
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        b[a[i]]++;
    }
    for(int i=-49;i<50;i++)
    {
        if(b[i]>av)
        {
            cout<<i<<" ";
            ch++;
        }
    }
    if(ch==0)
    cout<<"no";
    return 0;
}

注意点:

1.b[a[i]]相当于把a[i]的那个数字所在数组的位置++

2.然后进行ch++,这个代表是检查,一个数组当中是否存在数字是数组的一半多,如果不存在要输出no

3.还有一个值得注意的点是,数组的一半应该被设置为double数组,存在奇数数组,.

题目 1099: 校门外的树

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int l,m,a[105],b[105],dd[10005],sum=0,temp;//如果是dd[10005]={1}
    //这种情况下只会使得dd[10005]也就是数组的最后一个数为1;
    cin>>l>>m;
    for(int i=0;i<m;i++)
    {
        cin>>a[i]>>b[i];
    }
    for(int k=0;k<=l;k++)//要记得初始化,如果不初始化,有些c语言版本
    //无法识别出初始数组全部都是多少
    {
        dd[k]=1;//1代表从0到l都有一棵树
    }
    for(int i=0;i<m;i++)
    {
        if(b[i]<a[i])
        {
            temp=a[i];
            a[i]=b[i];
            b[i]=temp;
        }
        
        for(int j=a[i];j<=b[i];j++)
        {
          dd[j]=0;  
        }
    }
    for(int j=0;j<=l;j++)
    {
        if(dd[j]==1)
        sum++;
    }
    cout<<sum;

    return 0;
}

主要:原来有树的地方设置为1,下面出现的范围,在范围内设置为0,最后统计1的总数,就是剩下树木的数量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值