这题错哪了
2023-05-22 19:49:21
发布于:江苏
24阅读
0回复
0点赞
#include<algorithm>
#include<iostream>
using namespace std;
struct node{
int begin;
int end;
}act[10005];
bool cmp(node a,node b){
if(a.end!=b.end) return a.end<b.end;
else return a.begin>b.begin;
}
int tj(int n){
sort(act,act+n,cmp);
int sum=1,last=0;
for(int i=1;i<n;i++){
if(act[last].end<=act[i].begin){
last=i;
sum++;
}
}
return sum;
}
int main(){
int m;
cin>>m;
int a[m];
for(int i=0;i<m;i++){
int n;
cin>>n;
for(int j=0;j<n;j++) cin>>act[j].begin>>act[j].end;
for(int j=n+1;j<10000;j++){
act[j].begin=0;
act[j].end=0;
}
a[i]=tj(n);
}
for(int i=0;i<m;i++) cout<<a[i]<<endl;
return 0;
}
全部评论 1
GPT:
根据您提供的代码,发现有以下问题:
在第二个循环中,没有必要为剩余的活动手动赋初值为 0。因为在输入时只会输入 n 个活动,后面没有输入的活动不需要处理,也不会对程序产生影响。
程序逻辑有误。在第二个循环中,应该使用 j<n 的条件进行循环,而不是 j<n+1。此外,在 tj 函数中,需将计数器 sum 初始化为 0,表示当前选择的活动数为 0。修改后的代码如下:2023-05-26 来自 浙江
0
有帮助,赞一个