編程每日刷題系列四(煤球數(shù)目)
煤球數(shù)目
有一堆煤球,堆成三角棱錐形。具體:
第一層放1個(gè),
第二層3個(gè)(排列成三角形),
第三層6個(gè)(排列成三角形),
第四層10個(gè)(排列成三角形),
....
如果一共有100層,共有多少個(gè)煤球?
請?zhí)畋硎久呵蚩倲?shù)目的數(shù)字。
注意:你提交的應(yīng)該是一個(gè)整數(shù),不要填寫任何多余的內(nèi)容或說明性文字。
思路
很明顯,第2個(gè)三角形的煤球數(shù)目比前面第1個(gè)三角形的差2個(gè);第3個(gè)三角形的煤球數(shù)目比前面第2個(gè)三角形的差3個(gè);依此類推,我們可以發(fā)現(xiàn)規(guī)律,f(n) = f(n - 1) + n,因此我們可以用遞歸來做這個(gè)題
還有一點(diǎn)要特別注意,題目問的是100層總煤球數(shù)目,而不是第100層的煤球數(shù)目,所以一定要審清題干!
法一(遞歸法):
(由于B站的編輯器bug還未解決,所以如果把代碼寫到代碼塊里會(huì)顯示不出完整的代碼,就像這樣)
C++代碼:
所以大家將就一下吧,下面的就是正常顯示的代碼了
#include<iostream>
using namespace std;
int func(int m)
{
if(m == 1)
return 1;
else
return func(m - 1) + m;
}
int main()
{
int n = 100;
int sum = 0;
for(int i = 1; i <= n; i++)
{
sum += func(i);
}
cout << sum << endl;
return 0;
}
運(yùn)行結(jié)果:

C代碼:
#include<stdio.h>
int f(int n)
{
if(n == 1)
return 1;
else if(n > 1)
return f(n - 1) + n;
}
int main()
{
int i, flo, sum = 0;
scanf("%d",&i);
for(flo = 1; flo <= i; flo++)
sum += f(flo);
printf("%d\n", sum);
return 0;
}
法二:(直接法)
既然我們已經(jīng)發(fā)現(xiàn)了規(guī)律,那就干脆直接求
C代碼:
#include<stdio.h>
int main()
{
int sum = 0, i, tmp = 0;
for(i = 1; i <= 100; i++)
{
tmp += i;
sum += tmp;
}
printf("%d\n", sum);
return 0;
}
對應(yīng)的C++代碼就懶得寫了
之后我會(huì)持續(xù)更新,如果喜歡我的文章,請記得一鍵三連哦,點(diǎn)贊關(guān)注收藏,你的每一個(gè)贊每一份關(guān)注每一次收藏都將是我前進(jìn)路上的無限動(dòng)力 ?。?!↖(▔▽▔)↗感謝支持!