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;
}
本文介绍了一道关于纸牌堆叠的算法题目,通过数学推导和编程实现,探讨了如何计算不同层数的纸牌堆叠方案数量。文章提供了一个C++程序示例,用于计算给定纸牌数量时所有可能的堆叠层数。
1653

被折叠的 条评论
为什么被折叠?



