Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670123
  • 博文数量: 150
  • 博客积分: 4070
  • 博客等级: 中校
  • 技术积分: 1795
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-23 21:44
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(123)

2010年(26)

分类: C/C++

2011-07-06 09:58:38

1、分别用递归和非递归的方式计算N!。
递归:
  1. #include <iostream>
  2. using namespace std;

  3. int fun(int n)
  4. {
  5.     if (n == 0)
  6.         return 1;
  7.     else
  8.         return n * fun(n-1);
  9. }

  10. int main()
  11. {    
  12.     for (int i = 0; i < 6; i++)
  13.     {
  14.         cout<<fun(i)<<endl;
  15.     }
  16.     
  17.     return 0;
  18. }
非递归:
  1. #include <iostream>
  2. using namespace std;

  3. int fun(int n)
  4. {
  5.     int result = 1;
  6.     for (int i = n; i > 0; i--)
  7.     {
  8.         result *= i;
  9.     }
  10.     return result;
  11. }

  12. int main()
  13. {    
  14.     for (int i = 0; i < 6; i++)
  15.     {
  16.         cout<<fun(i)<<endl;
  17.     }
  18.     
  19.     return 0;
  20. }
2.用递归和非递归方式计算下面函数的值。
 
 
 
递归:
 
 
  1. #include <iostream>
  2. using namespace std;

  3. int fun(int m, int n)
  4. {
  5.     if (m == 1)
  6.         return n;
  7.     if (n == 1)
  8.         return m;
  9.     return fun(m-1, n) + fun(m, n - 1);
  10. }

  11. int main()
  12. {    
  13.     for (int i = 1; i < 6; i++)
  14.     {
  15.         for (int j = 1; j < 6; j++)
  16.         {
  17.             cout<<fun(i, j)<<" ";
  18.         }
  19.         cout<<endl;
  20.     }
  21.     
  22.     return 0;
  23. }
 
 
非递归:
  1. #include <iostream>
  2. using namespace std;

  3. int fun(int m, int n)
  4. {
  5.     int result;
  6.     int **arr;
  7.     arr = new int *[m]; //申请的行
  8.     for (int i = 0; i < m; i++) //申请列
  9.     {
  10.         arr[i] = new int [n];
  11.     }
  12.     
  13.     for (i = 0; i < m; i++)
  14.     {
  15.         arr[i][0] = i+1;
  16.     }
  17.     for (i = 0; i < n; i++)
  18.     {
  19.         arr[0][i] = i+1;
  20.     }
  21.     for (i = 1; i < m; i++)
  22.     {
  23.         for (int j = 1; j < n; j++)
  24.         {
  25.             arr[i][j] = arr[i-1][j] + arr[i][j-1];
  26.         }
  27.     }

  28.     result = arr[m-1][n-1];
  29.     
  30.     for (i = 0; i < m; i++) //释放行
  31.     {
  32.         delete arr[i];
  33.         arr[i] = NULL;
  34.     }
  35.     delete []arr; //释放整个数组
  36.     arr = NULL;

  37.     return result;
  38. }

  39. int main()
  40. {    
  41.     for (int i = 1; i < 6; i++)
  42.     {
  43.         for (int j = 1; j < 6; j++)
  44.         {
  45.             cout<<fun(i, j)<<" ";
  46.         }
  47.         cout<<endl;
  48.     }
  49.     
  50.     return 0;
  51. }
 
 
3. 有两个数组A,B,元素相同,但是顺序不同,写一段代码判断判断A中元素分别与B中那个元素匹配。
  1. #include <iostream>
  2. using namespace std;

  3. void match(int *a, int *b, int n)
  4. {
  5.     int i = 0, j;
  6.     while (i < n)
  7.     {
  8.         j = 0;
  9.         while (j < n)
  10.         {
  11.             if (a[i] == b[j])
  12.             {
  13.                 cout<<"a["<<i<<"]"<<" match "<<"b["<<j<<"]"<<endl;
  14.             }
  15.             j++;
  16.         }
  17.         i++;
  18.     }
  19. }

  20. int main()
  21. {    
  22.     int a[5] = {1,2,3,4,5};
  23.     int b[5] = {4,2,1,5,3};
  24.     match(a, b, sizeof(a)/sizeof(a[0]));
  25.     
  26.     return 0;
  27. }
4. 判断水仙花数。水仙花数是一个三位数ABC,它满足的条件是:ABC=A^3 + B^3 + C^3。
  1. #include <iostream>
  2. using namespace std;

  3. void shuixianhua()
  4. {
  5.     int arr[3]; //用于存储个位、十位、百位的数字
  6.     for (int i = 100; i < 1000; i++)
  7.     {
  8.         int j = 0;
  9.         int n = i;
  10.         while (n)
  11.         {
  12.             arr[j++] = n % 10;
  13.             n /= 10;
  14.         }
  15.         
  16.         int sum = 0;
  17.         for (int k = 0; k < 3; k++)
  18.         {
  19.             sum += arr[k] * arr[k] * arr[k];
  20.         }
  21.         if (sum == i)
  22.         {
  23.             cout<<i<<endl;
  24.         }
  25.     }
  26. }

  27. int main()
  28. {    
  29.     shuixianhua();
  30.     
  31.     return 0;
  32. }
阅读(681) | 评论(0) | 转发(0) |
0

上一篇:Linux下fork函数返回值

下一篇:虚指针

给主人留下些什么吧!~~