小蓝有 20230610 颗弹珠,想摆成一个金字塔。
高度 1:1 颗
高度 2:4 颗
高度 3:10 颗
高度 4:20 颗
问:手里的弹珠最多能摆多高? !12
观察可知,从上往下,每层数量是以1为首项,公差为以2为首项1为公差的等差数列的等差数列
枚举每层数量相加即可

#include <iostream>
#include <cmath>
using namespace std;
int main(){
int sum=0;
int pre=1;
int high=0;
while(sum<=20230610){
sum+=pre;
high+=1;
pre=pre+high+1;
}
cout<<high-1;
}

13
这是每层的数量以及高度为N的总数量和前缀和的关系
#include<iostream>
using namespace std;
int main(){
int prefix[1001];
for(int i=1;i<=1000;i++)
prefix[i]=i;
for(int j=2;j<=1000;j++)
prefix[j]=prefix[j]+prefix[j-1];
for(int k=2;k<=1000;k++)
{
prefix[k]=prefix[k]+prefix[k-1];
if(prefix[k]>20230610)
{
cout<<k-1;
break;
}
if(prefix[k]==20230610)
{
cout<<k;
break;
}
}
}