文章内容主要参考刘汝佳著作《算法竞赛入门经典》(第2版)
一、交换两个变量方法总结
方法一:
#include<iostream>
using namespace std;
int main()
{
int a,b;
int t;
cin>>a>>b;
t=a;
a=b;
b=t;
cout<<a<<" "<<b<<endl;
return 0;
}
方法二:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
a=a-b;
b=a+b;
a=b-a;
cout<<a<<" "<<b<<endl;
return 0;
}
方法三:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
a^=b^=a^=b;
cout<<a<<" "<<b<<endl;
return 0;
}
方法四:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<b<<" "<<a<<endl;
return 0;
}
二、三整数排序问题
方法一:(三整数大小关系共有六种情况abc,acb,bac,bca,cab,cba)
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a<=b && b<=c)cout<<a<<" "<<b<<" "<<c<<endl;
else if(a<=c && c<=b)cout<<a<<" "<<c<<" "<<b<<endl;
else if(b<=a && a<=c)cout<<b<<" "<<a<<" "<<c<<endl;
else if(b<=c && c<=a)cout<<b<<" "<<c<<" "<<a<<endl;
else if(c<=a && a<=b)cout<<c<<" "<<a<<" "<<b<<endl;
else cout<<c<<" "<<b<<" "<<a<<endl;
return 0;
}
方法二:
#include<iostream>
using namespace std;
int main()
{
int a,b,c,t;
cin>>a>>b>>c;
if(a>b){t=a,a=b,b=t;}//执行后a<=b
if(a>c){t=a,a=c,c=t;}//执行后a<=c
if(b>c){t=b,b=c,c=t;}//执行后b<=c
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
三、近似计算π,已知π/4=1-1/3+1/5-1/7+…,知道最后一项小于1e-6。
方法一:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double sum=0;
double s=1.0;
for(int i=1;;i+=2)
{
double t=s/i;
if(abs(t)<1e-6)
break;
sum+=t;
s=-s;
}
cout<<sum*4<<endl;
return 0;
}
方法二:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double sum=0;
for(int i=0;;i++)
{
double term=1.0/(2*i+1);
if(term<1e-6)break;
if(i&1)sum-=term;
else sum+=term;
}
cout<<sum*4<<endl;
return 0;
}