深入详解三角数列问题——里奥老师乾坤大挪移

  1. 对高斯求和的思想+循环的思想使用乾坤大挪移:
    第一层循环,求前j项的高斯和。
    第二层循环,每求一次和,每得一个三角数列的项目。
    for( int j = 1 ; j <= 10 ; j++) {
        int sum = 0 ;
        for( int i = 1 ; i <= j ; i ++) {
            sum = sum + i ;
        }
        cout << sum << endl ;
    }
  1. 分析,前面的求和计算步骤存在重复计算,如果能有一个地方,能保存前面n-1项的计算结果,那计算第n项时,只需要在n-1项的基础上算即可。
    int temp = 0 ;
    int sum = 0 ;
    for( int i = 1 ; i <= 10 ; i++) {
        sum = temp + i ;
        temp = sum ;
        cout << temp << endl;
    }
  1. 进一步分析,temp变量不需要,
    int sum = 0 ;
    for( int i = 1 ; i <= 10 ; i++) {
        sum = sum + i ;
        cout << sum << endl;
    }
  1. 使用数组来解决,里氏代码演绎法:
    第1项为1 \iff a[1] = a[0] + 1 ;
    第2项为3 \iff a[2] = a[1] + 2 ;
    第3项为6 \iff a[3] = a[2] + 3 ;
    第4项为10 \iff a[4] = a[3] + 4 ;
    第5项为15 \iff a[5] = a[4] + 5 ;
    规律 \iff a[i] = a[i-1]+ i ;
    int a[10+1] ;
    for( int i = 0 ; i <= 10 ; i ++) {
        a[i] = i ;
    }
    for( int i = 1 ; i <= 10 ; i ++) {
        a[i] = a[i-1]+i ;
        cout << a[i] << endl ;
    }
  1. 使用数组来解决,动态规划的思想:
    dp[n]=f(dp[n-1])

  2. 使用数组解决,一维数组打表/打卡/计数法:
    1 3 6 10 15 21

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容