马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一个贪心算法的一个题目:可以输入多组数据,每组先输入n,表示有n部电影,然后接下来n个数据,分别表示电影的开始和结束时间,输入0表示输入结束,要求安排一下尽可能多的完整看电影,最后输出最多能看几部。
思路是先排序然后在判断下一部电影的开始时间是否大于上一部的结束时间,然后c语言我用的是冒泡排序法,c++用的sort函数,放在PTA上c语言的就显示答案错误,编译器上是对的,真心不知道为什么,求解求解!
这是c++代码
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int begin;
int end;
};
node film[100];
bool cmp(node& a, node& b)
{
return a.end < b.end;
}
int main()
{
int n;
while (1)
{
scanf("%d", &n);
if (n == 0)
{
break;
}
for (int i = 0; i < n; i++)
{
cin >> film[i].begin >> film[i].end;
}
sort(film, film + n, cmp);
int end_time = film[0].end;
int ans = 1;
for (int i = 1; i < n; i++)
{
if (end_time <= film[i].begin)
{
end_time = film[i].end;
ans++;
}
}
cout << ans <<endl;
}
return 0;
}
这是c语言代码
#include<stdio.h>
struct node
{
int begin;
int end;
};
struct node film[100];
struct node t;
int main(void)
{
int n;
while (1)
{
scanf("%d", &n);
if (n == 0)
{
break;
}
for (int i = 0; i < n; i++)
{
scanf("%d %d", &film[i].begin, &film[i].end);
}
for (int i = 0; i < n - 1; i++) //排序
{
for (int j = 0; j < n - i - 1; j++)
{
if (film[j].end > film[j+1].end)
{
t = film[j];
film[j] = film[j + 1];
film[j + 1] = t;
}
}
}
int end_time = film[0].end;
int cnt = 1;
for (int i = 1; i < n; i++)
{
if (film[i].begin > end_time)
{
end_time = film[i].begin;
cnt++;
}
}
printf("%d\n", cnt);
}
return 0;
}
|