数据排序 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的总数,就是剩下树木的数量.

浙公网安备 33010602011771号