zoukankan      html  css  js  c++  java
  • 游记(2)

    这些提示来自 《 从问题到程序 - 程序设计与C语言引论》 第二版 裘宗燕 ^_^

    0 循环结构一般不要用浮点数进行计数,不能保证一定会循环预想的次数;

    1 框架到细节的设计程序,不论是大程序还是小程序,有效分解复杂度;

    2 求 200 内的平方数的方法

    void solution ( )  {
            for  (int m = 1; m * m <= 200 ;  m++)  
                  printf("%d
    ",m * m);
    }
    

     

    /* 有如下公式
     a1 = 1;
     an = an-1 + 2n+1;
    
    */
    
    void solution ()  {
           int a1 = 1;
           for  ( int i = 0 ;an + 2 * i +  1 )  <= 200; i++)  {
                    printf("%d", an + 2 * i + 1 );
                    an = an + 2 * i + 1;
           }
    }
    

    3 小龟爬爬问题,第1秒 1/1 m, 第2秒 1/2 m, 第3秒 1/4 m,1小时能爬多少米?爬20 米要多久?

    double solution1 (int n)  {

         int sum = 0;

         for ( i = 1; i <= n ; i++) 

             sum += 1 / (float)i;

         return sum;

    }

    int result = solution (3600);

    printf  ("%d ", result);

    int solution2  (double n)  {

             long i;                   //i think int i also OK.

             double n = 0.0 ;

             for  ( i = 0; n < 20; i ++)  

                 n += 1 / (float) i;

            return i - 1;

     }

    4  为程序计时,借助 time.h 中的 clock 函数

    clock() / CLOCKS_PER_SEC   

    得到程序运行开始到此刻的时间,单位是 秒 (s),不要直接输出 clock( ) 返回值。

    多说一句,这个测试在学习算法的时候用得上,其实得到的是一个long int 数值,需要强制转化为 double。

    5  斐波那契数列

    效率低解法:

    long fib  (int n)  {

          if  ( n <=0 ) return -1;

          if ( n == 1 || n == 2)  

                 return 1;

          else

                 return  fib ( n - 1 ) +fib ( n - 2);

    }

    来个好方法:

    long fib (int n)  {

          if (n <= 1) return -1;

          if ( n== 2 || n == 1)  return 1;

          long f1 = f2 = 1;

          long f3  ;

         for ( int i = 3; i <= n; i++ )  {

             f3 = f1+f2;

             f2 = f3;

             f1 = f2;

         }

         return f3;

    }

    或者 (来自书上,是错的)

    long fib (int n)  {

      if ( n <= 1) return -1;

      if ( n == 1 || n == 2)   return 1;

      long f1 = 1; f2 = 1, f3;

      int i;

      for ( f3 = f1 + f2, i = 2 ; i < n ; i++ )  {

          f1 = f2;

       f2  = f3;

          f3 = f1 + f2;

        }

    还有一种 logN 的解法,以后再补上。

    6  最大公约数问题

    gcd ( m, n ) = {  n (m%n == 0);   gcd (n , m % n) ;

    long gcd ( long m, long n)  {

         return m % n == 0? n ; gcd ( n, m % n);

    }

    7 汉诺塔 henoi 问题

    void moveone (char from,char to )  {

              printf (" %c -> %c ", from,to);

    }

    void henoi  ( char from , char to , char by ,int n)  {

            if ( n == 1)  moveone ( from,to);

            else  {

                  henoi  (from ,by,to,n-1);

                  moveone (from,to);

                  henoi  ( by,to,from,n-1);

           }

    }

    -------------------------------------------------------------------------------------------------------------------------------------------------

    what a day.

  • 相关阅读:
    采购标准流程及底层分析
    ORACLE FORM ZA 常用子程序
    在R12中实现多OU编程
    FORM未找到数据的原因
    在Oracle的FORM中高亮显示鼠标点击或光标所在的行
    MPICH运行程序时出错之解决方法
    两个基于C++的MPI编辑例子
    面向对象PHP面向对象的特性
    PHP 数组遍历 foreach 语法结构
    php BC高精确度函数库
  • 原文地址:https://www.cnblogs.com/hanxinle/p/7879889.html
Copyright © 2011-2022 走看看