华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1661|回复: 0
打印 上一主题 下一主题

20151208讲义

[复制链接]

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
跳转到指定楼层
楼主
发表于 2015-12-13 11:43:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 最大公约数
  2. #include <iostream>
  3. using namespace std;
  4. int gcd1(int m,int n)
  5. {
  6.     if (n==0) return m;
  7.     else return gcd1(n,m%n);
  8. }
  9. int gcd2(int m,int n)
  10. {
  11.     int x=m%n;
  12.     while (x!=0) {m=n;n=x;x=m%n;}
  13.     return n;
  14. }

  15. int main()
  16. {
  17.     int x,y;
  18.     cin >>x>>y;
  19.     cout <<gcd1(x,y) <<' '<<gcd2(x,y);
  20.     return 0;
  21. }

  22. 阶乘问题
  23. #include <iostream>
  24. using namespace std;
  25. int fac(int n)
  26. {
  27.     if (n==0) return 1;
  28.     else return fac(n-1)*n;
  29. }

  30. int main()
  31. {
  32.     cout <<fac(10);
  33.     return 0;
  34. }

  35. Fibo
  36. #include <iostream>
  37. using namespace std;
  38. int fibo(int n)
  39. {
  40.     if (n==1) return 1;
  41.     else if (n==2) return 2;
  42.     else return fibo(n-1)+fibo(n-2);
  43. }

  44. int main()
  45. {
  46.     cout <<fibo(10);
  47.     return 0;
  48. }

  49. 汉诺塔问题
  50. #include <iostream>
  51. using namespace std;
  52. void ha(int n,char a,char b,char c)
  53. {
  54.     if (n==1) cout<<a<<"->"<<c<<endl;
  55.     else
  56.     {
  57.         ha(n-1,a,c,b);  // n-1个盘子由A通过C挪到B上
  58.         cout<<a<<"->"<<c<<endl;// 最后一个盘子直接由A到C
  59.         ha(n-1,b,a,c);// n-1个盘子由B通过A挪到C
  60.     }
  61. }

  62. int main()
  63. {
  64.     ha(3,'A','B','C');
  65.     return 0;
  66. }

  67. 错排问题
  68. #include <iostream>
  69. using namespace std;
  70. int cp(int n)
  71. {
  72.     if (n==1) return 0;
  73.     else if (n==2) return 1;
  74.     else return (n-1)*(cp(n-1)+cp(n-2));
  75. }

  76. int main()
  77. {
  78.     for (int i=1;i<=10;i++)cout <<cp(i)<<' ';
  79.     return 0;
  80. }

  81. A^B的计算
  82. #include <iostream>
  83. using namespace std;
  84. int a,b;
  85. long long way1(int n)
  86. {
  87.    if (n==0) return 1;   //0次方等于1
  88.    else if (n%2==1) return way1(n/2)*way1(n/2)*a; //奇数次
  89.         else return way1(n/2)*way1(n/2);//偶数次
  90. }
  91. long long way2(int n)
  92. {
  93.         long long s=1,t=a;
  94.         while (n>0)
  95.         {
  96.                 if (n%2==1) s=(s*t);
  97.                 n=n/2;t=t*t;
  98.         }
  99.         return s;
  100. }
  101. int main()
  102. {
  103.     a=2;b=10;cout<<way1(b)<<' '<<way2(b);
  104.         return 0;
  105. }

  106. PMN

  107. #include <iostream>
  108. using namespace std;
  109. int a[10];
  110. bool b[10];
  111. void mysearch(int i)
  112. {
  113.     int j,k;
  114.     if (i>=3) {for (j=0; j<=2; j++) cout<<a[j];cout<<endl;}
  115.     else for (k=0; k<=4; k++)
  116.             if (b[k])
  117.             {
  118.                 a[i]=k;
  119.                 b[k]=false;
  120.                 mysearch(i+1);
  121.                 b[k]=true;
  122.             }
  123. }

  124. int main()
  125. {
  126.     for (int i=0;i<=4;i++) b[i]=true;
  127.     mysearch(0);
  128. }

  129. CMN
  130. #include <iostream>
  131. using namespace std;
  132. int a[10];
  133. void mysearch(int i)
  134. {
  135.     int j,k;
  136.     if (i>=3) {for (j=0; j<=2; j++) cout<<a[j];cout<<endl;}
  137.     else for (k=((i==0)?0:a[i-1]+1); k<=5; k++)
  138.           { a[i]=k;  mysearch(i+1);  }
  139. }

  140. int main()
  141. {
  142.     mysearch(0);
  143. }

复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-25 14:22 , Processed in 0.263052 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表