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