Codeforces Round #269 (Div. 2) C

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值