有时程序中会使用多次相同的语句,而且无法通过循环来减少重复编程。对于这样的功能,如果能像使用 sqrt()、max() 这样变成一个函数,那该多好啊!其实每个程序都用到了主函数——main()。除此之外,还可以自己定义其他函数,并将参数喂给这些函数,使其能够根据这些参数完成要求的任务。不过这方面还有更复杂的一些知识点,比如参数传递与变量的作用域,接下来也需要学习。函数内还能调用自己,也就是递归函数,这是程序设计新手入门公认的第一道坎,但却是非常重要的一部分。

最后介绍了结构体,可以建立并操作对象。存储一些和对象有关的信息会变得相当便利。例如,可以设计结构体来存储一位同学的各项信息——姓名、年龄、性别、考试成绩等等,而一个确定的同学就是一个对象。可以很方便地操作一个对象,也可以用数组批量存储对象。

https://www.luogu.com.cn/training/105#problems

P5735 【深基7.例1】距离函数

#include<bits/stdc++.h>  
using namespace std;  
double x[15],y[15];  
double solve(double x,double y,double xx,double yy)  
{  
	return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));  
}  
int main(void)  
{  
	for(int i=0;i<3;i++) cin>>x[i]>>y[i];  
	double sum=0;  
	sum+=solve(x[0],y[0],x[1],y[1]);  
	sum+=solve(x[0],y[0],x[2],y[2]);  
	sum+=solve(x[1],y[1],x[2],y[2]);  
	printf("%.2lf",sum);  
	return 0;  
}  

P5736 【深基7.例2】质数筛

#include<bits/stdc++.h>  
using namespace std;  
int a[105],n;  
int main(void)  
{  
	cin>>n;  
	for(int i=0;i<n;i++)  
	{  
		cin>>a[i];  
		int flag=0;  
		for(int j=2;j<=sqrt(a[i]);j++)  
			if(a[i]%j==0) flag=1;  
		if(!flag&&a[i]!=1) cout<<a[i]<<" ";  
	}  
	return 0;  
}  

P5737 【深基7.例3】闰年展示

#include<bits/stdc++.h>   
using namespace std;  
int l,r;  
vector<int>ve;   
int check(int x)   
{  
	if(x%400==0||(x%4==0&&x%100!=0)) return 1;  
	return 0;  
}  
int main(void)  
{  
	cin>>l>>r;  
	for(int i=l;i<=r;i++)  
		if(check(i)) ve.push_back(i);  
	cout<<ve.size()<<endl;  
	for(int i=0;i<ve.size();i++) cout<<ve[i]<<" ";  
	return 0;  
}  

P5738 【深基7.例4】歌唱比赛

#include<bits/stdc++.h>  
using namespace std;  
int n,m,a[105];  
double ans;  
int main(void)  
{  
	cin>>n>>m;  
	for(int i=1;i<=n;i++)  
	{  
		double sum=0;  
		for(int j=0;j<m;j++) cin>>a[j],sum+=a[j];  
		sort(a,a+m);  
		ans=max(ans,(sum-a[0]-a[m-1])/(m-2));  
	}  
	printf("%.2lf",ans);  
	return 0;  
}  

P5739 【深基7.例7】计算阶乘

#include<bits/stdc++.h>   
using namespace std;  
int main(void)  
{  
	long long int n; cin>>n;  
	long long int sum=1;  
	while(n) sum*=n,n--;  
	cout<<sum;  
	return 0;  
}  

P5461 赦免战俘

#include<bits/stdc++.h>   
using namespace std;  
const int N=1050;  
int a[N][N],n;  
int main(void)  
{  
	cin>>n;  
	n=pow(2,n);  
	a[1][n]=1;  
	for(int i=2;i<=n;i++)  
	{  
		for(int j=1;j<=n;j++)  
			a[i][j]=(a[i-1][j]+a[i-1][j+1])%2;  
	}  
	for(int i=1;i<=n;i++)  
	{  
		for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";  
		cout<<endl;  
	}  
	return 0;  
}  
//0 1  
//1 1  
  
//0 0 0 1   
//0 0 1 1  
//0 1 0 1  
//1 1 1 1  
  
//0 0 0 0 0 0 0 1  
//0 0 0 0 0 0 1 1  
//0 0 0 0 0 1 0 1  
//0 0 0 0 1 1 1 1  
//0 0 0 1 0 0 0 1  
//0 0 1 1 0 0 1 1  
//0 1 0 1 0 1 0 1  
//1 1 1 1 1 1 1 1  
#include<bits/stdc++.h>   
using namespace std;  
const int N=1050;  
int a[N][N],n;  
void dfs(int n,int x,int y)  
{  
	if(n==1) return;  
	for(int i=x;i<=x+n/2-1;i++)  
		for(int j=y;j<=y+n/2-1;j++) a[i][j]=0;  
	dfs(n/2,x,y+n/2);  
	dfs(n/2,x+n/2,y);  
	dfs(n/2,x+n/2,y+n/2);  
}  
int main(void)  
{  
	cin>>n;  
	n=pow(2,n);  
	for(int i=1;i<=n;i++)  
		for(int j=1;j<=n;j++) a[i][j]=1;  
	dfs(n,1,1);  
	for(int i=1;i<=n;i++)  
	{  
		for(int j=1;j<=n;j++)  
		{  
			cout<<a[i][j]<<" ";  
		}  
		puts("");  
	}  
	return 0;  
}  

P5740 【深基7.例9】最厉害的学生

#include<bits/stdc++.h>  
using namespace std;  
struct node  
{  
	string name;  
	int a,b,c,id;  
}temp;  
int n;  
vector<node>ve;  
bool cmp(node a,node b)  
{  
	if(a.a+a.b+a.c!=b.a+b.b+b.c) return a.a+a.b+a.c>b.a+b.b+b.c;  
	return a.id<b.id;  
}  
int main(void)  
{  
	cin>>n;  
	for(int i=0;i<n;i++)  
	{  
		cin>>temp.name>>temp.a>>temp.b>>temp.c;  
		temp.id=i;  
		ve.push_back(temp);  
	}  
	sort(ve.begin(),ve.end(),cmp);  
	cout<<ve[0].name<<" "<<ve[0].a<<" "<<ve[0].b<<" "<<ve[0].c;  
	return 0;  
}  

P5741 【深基7.例10】旗鼓相当的对手 - 加强版

#include<bits/stdc++.h>  
using namespace std;  
struct node  
{  
	string name;  
	int a,b,c;  
}temp;  
vector<node>ve;  
vector< pair<string,string> >s;  
int n;  
int main(void)  
{  
	cin>>n;  
	for(int i=0;i<n;i++)  
	{  
		cin>>temp.name>>temp.a>>temp.b>>temp.c;  
		ve.push_back(temp);  
	}  
	for(int i=0;i<n;i++)  
	{  
		for(int j=i+1;j<n;j++)  
		{  
			if(abs(ve[i].a-ve[j].a)>5) continue;  
			if(abs(ve[i].b-ve[j].b)>5) continue;  
			if(abs(ve[i].c-ve[j].c)>5) continue;  
			if(abs(ve[i].a+ve[i].b+ve[i].c-ve[j].a-ve[j].b-ve[j].c)>10) continue;  
			if(ve[i].name<=ve[j].name) s.push_back({ve[i].name,ve[j].name});  
			else s.push_back({ve[j].name,ve[i].name});  
		}  
	}  
	sort(s.begin(),s.end());  
	for(int i=0;i<s.size();i++) cout<<s[i].first<<" "<<s[i].second<<endl;  
	return 0;  
}  

P5742 【深基7.例11】评等级

#include<bits/stdc++.h>  
using namespace std;  
int main(void)  
{  
	int n; cin>>n;  
	while(n--)   
	{  
		int id,a,b; cin>>id>>a>>b;  
		int sum=a+b;  
		if(sum>140&&(a*7+b*3>=800)) cout<<"Excellent"<<endl;  
		else cout<<"Not excellent"<<endl;  
	}  
	return 0;  
}  

P1075 [NOIP2012 普及组] 质因数分解

#include<bits/stdc++.h>  
using namespace std;  
int check(int x)  
{  
	for(int i=2;i<=x/i;i++)  
		if(x%i==0) return 0;  
	return 1;  
}  
int main(void)  
{  
	int n; cin>>n;  
	for(int i=2;i<=n/i;i++)  
	{  
		if(n%i==0)  
		{  
			if(check(i)&&check(n/i))  
			{  
				cout<<n/i;  
				return 0;  
			}  
		}  
	}  
	return 0;  
}  

P1304 哥德巴赫猜想

#include<bits/stdc++.h>  
using namespace std;  
const int N=1e5+10;  
int prime[N],st[N],cnt;  
void init(int n)  
{  
	st[0]=1,st[1]=1;  
	for(int i=2;i<=n;i++)  
	{  
		if(!st[i]) prime[cnt++]=i;  
		for(int j=0;prime[j]<=n/i;j++)  
		{  
			st[i*prime[j]]=1;  
			if(i%prime[j]==0) break;  
		}  
	}  
}  
int main(void)  
{  
	init(1e5);  
	int n; cin>>n;  
	for(int i=2;i<=n;i+=2)  
	{  
		for(int j=0;j<cnt;j++)  
		{  
			if(prime[j]>i) break;  
			if(!st[i-prime[j]])  
			{  
				printf("%d=%d+%d\n",i,prime[j],i-prime[j]);  
				break;  
			}  
		}  
	}  
}  

P1217 [USACO1.5]回文质数 Prime Palindromes

#include<bits/stdc++.h>  
using namespace std;  
const int N=1e7+10;  
int prime[N],st[N],cnt;  
int l,r;  
void init(int n)  
{  
	for(int i=2;i<=n;i++)  
	{  
		if(!st[i]) prime[cnt++]=i;  
		for(int j=0;prime[j]<=n/i;j++)  
		{  
			st[i*prime[j]]=1;  
			if(i%prime[j]==0) break;  
		}  
	}  
}  
int check(int x)  
{  
	string s=to_string(x);  
	for(int i=0;i<s.size()/2;i++)  
	{  
		if(s[i]!=s[s.size()-1-i]) return 0;  
	}  
	return 1;  
}  
int main(void)  
{  
	init(1e7);  
	cin>>l>>r;  
	for(int i=0;i<cnt;i++)  
	{  
		if(prime[i]>=l&&prime[i]<=r&&check(prime[i]))  
		cout<<prime[i]<<endl;  
	}  
	return 0;  
}  

P2415 集合求和

#include<bits/stdc++.h>  
using namespace std;  
vector<int>ve;  
long long int n,sum;  
int main(void)  
{  
	while(cin>>n) ve.push_back(n);  
	long long int cnt=pow(2,ve.size()-1);  
	for(int i=0;i<ve.size();i++) sum+=cnt*ve[i];  
	cout<<sum;  
	return 0;  
}  

P5743 【深基7.习8】猴子吃桃

#include<bits/stdc++.h>  
using namespace std;  
int main(void)  
{  
	int n; cin>>n;  
	int sum=1;  
	for(int i=n-1;i>=1;i--) sum+=1,sum*=2;  
	cout<<sum;  
	return 0;  
}  

P5744 【深基7.习9】培训

#include<bits/stdc++.h>  
using namespace std;  
int main(void)  
{  
	int n; cin>>n;  
	while(n--)  
	{  
		string name; cin>>name;  
		int age,score; cin>>age>>score;  
		score=score*1.2;  
		score=min(score,600);  
		cout<<name<<" "<<age+1<<" "<<score<<endl;  
	}  
	return 0;  
}