这个假期收获很多,接下来就记录一下这个假期学的内容。之前在504有的内容已经学过了,但是学的不牢固,然后在501又好好的复习了一遍,感觉收获很多。第一节,结构体。
结构体
首先,结构体是一个很重要的基础,在结构体的基础上可以打链表等等,我觉得吧,结构体的风格和打函数的风格差不多。
个人感觉,结构体有很多优点,在最佳活动选择问题中,可以通过数组实现这个问题,也可以通过结构实现这个问题。结构体先发对于数组的优点是对结构体的转换可以实现对全体的转换。这句话可以通过如下代码理解。题目链接如下。
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2382/pid/1298
在对活动排序的时候,可以先将开始时间和结束时间分别存进数组里,然后在对数组进行操作,但是这样的话,在交换数组时就需要多进行一步操作。
第一个代码是用数组实现的,接下来是ac代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a[100];
int b[100];
int c[100];//数组a用来记录活动开始时间,数组b用来记录活动结束时间,数组c用来记录活动顺序。
cin>>n;
int i,j;
int t;
for(i=1; i<=n; i++)
{
cin>>a[i];
cin>>b[i];
c[i]=i;
}
for(i=1; i<=n; i++)
{
for(j=i+1; j<=n; j++)
{
if(b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
t=a[i];
a[i]=a[j];
a[j]=t;
t=c[i];
c[i]=c[j];
c[j]=t;
}
}
}//按照结束时间升序排序,注意点,交换时候,开始时间,结束时间,等等都需要交换
cout<<c[1];
int k=b[1];
for(i=2; i<=n; i++)
{
if(a[i]>=k)
{
cout<<“,”<<c[i];
k=b[i];
}
}//贪新算法核心,比较上一个活动的结束时间和下一个活动的开始时间,如符合条件就输出序号。
return 0;
接下来是用结构体的方法
#include<bits/stdc++.h>
using namespace std;
struct node
{
int start;
int over;
int num;
} q[1000],temp;
int main()
{
int n;
cin>>n;
int i,j;
for(i=1; i<=n; i++)
{
cin>>q[i].start>>q[i].over;
q[i].num=i;
}
for(i=1; i<=n; i++)
{
for(j=i+1; j<=n; j++)
{
if(q[i].over>q[j].over)
{
temp=q[i];
q[i]=q[j];
q[j]=temp;
}
}
}
int t=q[1].over;
cout<<q[1].num;
for(i=2; i<=n; i++)
{
if(q[i].start>=t)
{
cout<<“,”<<q[i].num;
t=q[i].over;
}
}
cout<<endl;
return 0;
}
差距这不就看出来了吗~,其实这还不只是结构体的一个优点,当比较的内容或者需要交换的时候有字符串等,用结构体直接将胶片环节可以了,省的换来换去头晕。
其实,结构体就像是一个工具,通过这个工具可以实现很多思想。