|
- 最大公约数
- #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);
- }
复制代码 |
|