首页 新闻 会员 周边

贪心算法-整数区间 问:这段代码怎么错了

0
悬赏园豆:20 [待解决问题]

题目描述
请编程完成以下任务:

1.从文件中读取闭区间的个数及它们的描述;

2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。

输入
首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。
输出
第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少。
样例输入
4
3 6
2 4
0 2
4 7
样例输出
2

include <bits/stdc++.h>

using namespace std;
int lc;
int n,a[10001],b[10001],c[10001]={},k=0;
void sorta(int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[j]<a[i])
{
swap(a[j],a[i]);
swap(b[j],b[i]);
}
if(a[j]==a[i])
{
if(b[j]-a[j]<=b[i]-a[i])
{
swap(a[j],a[i]);
swap(b[j],b[i]);
}
}
}
}

}
void judgea(int a)
{
for(int i=0;i<=a;i++)
{
if(c[i]>0)
{
k++;
}
}
printf("%d",k);
}
void judgeb(int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[j]==a[i])
{
c[a[j]]=1;
}
}
for(int j=i+1;j<n;j++)
{
if(b[i]>a[j])
{
c[a[j]]=1;
}
}
for(int j=i+1;j<n;j++)
{
if(b[i]<a[i+1])
{
c[b[i]]=1;
c[a[i+1]]=1;
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d",&a[i],&b[i]);
}
sorta(n);
lc=b[n-1];
judgeb(n);
judgea(lc);
return 0;
}

TheZealous的主页 TheZealous | 初学一级 | 园豆:182
提问于:2021-01-20 07:44
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册