这道题,纯纯找规律。第一个图形用了 2 张扑克牌,第二个图形用了 7 张扑克牌,第三个图形用了 15 张扑克牌……
可以发现,第一个图形和第二个图形用的扑克牌的数量差是 5,第二个图形和第三个图形用的扑克牌的数量差是 8,但是很显然,这些数字不够推这个规律了。
让我们搞出第四个图形:
重点注意我画的红线(其实这个图是我直接给第三个图形截下来添了点儿东西产生的),总共有 11 条红线,再结合上面的 5 和 8,可以发现这些数字形成了一个等差数列。这个规律推出来就好写了。
到机房上课的时候听各路大佬说他们最后用了二分求解的时候我人都懵了,因为我的反应是:这玩意儿不是能找到规律后直接暴力的吗?
下面直接上代码:
#include<bits/stdc++.h>
using namespace std;
int now_plus=2;
int maxx=2;
int main()
{
int t;
cin>>t;//多组数据
while(t--)
{
int n;
cin>>n;
int ans=0;//记得初始化。
while(n>1)
{
now_plus=2;
maxx=2;//初始化别忘!不然直接挂飞了!
while(maxx<=n)
{
now_plus+=3;
maxx+=now_plus;
}//直接暴力算。
maxx-=now_plus;//maxx 超过了 n,直接减去它上一步加的数就行。
n-=maxx;
ans++;
}
cout<<ans<<endl;//别忘换行(警告一些平时比赛因为题目简单不运行的勇者)
}
return 0;
}