华师一附中OI组
标题:
20151208讲义
[打印本页]
作者:
diggersun
时间:
2015-12-13 11:43
标题:
20151208讲义
最大公约数
#include <iostream>
using namespace std;
int gcd1(int m,int n)
{
if (n==0) return m;
else return gcd1(n,m%n);
}
int gcd2(int m,int n)
{
int x=m%n;
while (x!=0) {m=n;n=x;x=m%n;}
return n;
}
int main()
{
int x,y;
cin >>x>>y;
cout <<gcd1(x,y) <<' '<<gcd2(x,y);
return 0;
}
阶乘问题
#include <iostream>
using namespace std;
int fac(int n)
{
if (n==0) return 1;
else return fac(n-1)*n;
}
int main()
{
cout <<fac(10);
return 0;
}
Fibo
#include <iostream>
using namespace std;
int fibo(int n)
{
if (n==1) return 1;
else if (n==2) return 2;
else return fibo(n-1)+fibo(n-2);
}
int main()
{
cout <<fibo(10);
return 0;
}
汉诺塔问题
#include <iostream>
using namespace std;
void ha(int n,char a,char b,char c)
{
if (n==1) cout<<a<<"->"<<c<<endl;
else
{
ha(n-1,a,c,b); // n-1个盘子由A通过C挪到B上
cout<<a<<"->"<<c<<endl;// 最后一个盘子直接由A到C
ha(n-1,b,a,c);// n-1个盘子由B通过A挪到C
}
}
int main()
{
ha(3,'A','B','C');
return 0;
}
错排问题
#include <iostream>
using namespace std;
int cp(int n)
{
if (n==1) return 0;
else if (n==2) return 1;
else return (n-1)*(cp(n-1)+cp(n-2));
}
int main()
{
for (int i=1;i<=10;i++)cout <<cp(i)<<' ';
return 0;
}
A^B的计算
#include <iostream>
using namespace std;
int a,b;
long long way1(int n)
{
if (n==0) return 1; //0次方等于1
else if (n%2==1) return way1(n/2)*way1(n/2)*a; //奇数次
else return way1(n/2)*way1(n/2);//偶数次
}
long long way2(int n)
{
long long s=1,t=a;
while (n>0)
{
if (n%2==1) s=(s*t);
n=n/2;t=t*t;
}
return s;
}
int main()
{
a=2;b=10;cout<<way1(b)<<' '<<way2(b);
return 0;
}
PMN
#include <iostream>
using namespace std;
int a[10];
bool b[10];
void mysearch(int i)
{
int j,k;
if (i>=3) {for (j=0; j<=2; j++) cout<<a[j];cout<<endl;}
else for (k=0; k<=4; k++)
if (b[k])
{
a[i]=k;
b[k]=false;
mysearch(i+1);
b[k]=true;
}
}
int main()
{
for (int i=0;i<=4;i++) b[i]=true;
mysearch(0);
}
CMN
#include <iostream>
using namespace std;
int a[10];
void mysearch(int i)
{
int j,k;
if (i>=3) {for (j=0; j<=2; j++) cout<<a[j];cout<<endl;}
else for (k=((i==0)?0:a[i-1]+1); k<=5; k++)
{ a[i]=k; mysearch(i+1); }
}
int main()
{
mysearch(0);
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2