C. MUH and House of Cards
题意:摞纸牌。。像下图那样,问能摞多少种不同的层。
思路:从1层开始往上枚举。先判是否满足摞i层的最少张数。如果满足,再判是否有多余的牌(因为每张都需要使用)。摞i层最少张数的通项是(3*(i+1))*i/2-i。没有剩余牌需要满足的条件是(n-2*i)%3==0。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string.h>
#include <ctype.h>
using namespace std;
#define ll long long
int main(){
ll n;
while(cin>>n){
ll ans=0;
for(ll i=1;;i++){
if(n>=(3*(i+1))*i/2-i){
if((n-2*i)%3==0){
//cout<<i<<endl;
ans++;
}
}else{
break;
}
}
cout<<ans<<endl;
}
return 0;
}