本文主要是介绍杰哥吃肉饼-c++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目来源
题目描述:
圣诞节本节,阿杰决定在自己的聚会上制作一个多维汉堡。
对于一个 L 级汉堡:0级汉堡是肉,L汉堡 (L≥1) 由方包,(L−1) 级汉堡,肉饼,(L−1) 级汉堡和另一个方包,从底部开始按此顺序垂直堆叠而成。
例如:一级汉堡和二级汉堡看起来像 01110 和0011101011100(旋转 90 度),其中 0 代表方包,1 代表肉饼。
阿杰将制作的汉堡为 N级汉堡包,从这个汉堡的底部往上吃共 X 层(一层是肉饼或方包)。
请问他能吃到多少快肉饼?
输入格式:
两个正整数,N 和 X 。
输出格式:
一个正整数,代表杰哥能吃到的馅饼数量。
样例输入:
2 7
样例输出:
4
数据范围:
对于 100% 的数据:0<L 1≤N≤50,X 小于总层数 。
思路:
很显然,这是一道递归题
那么是如何看出来的呢?(新手)——
有这个条件,基本上可以确定是要递归了
那如何去递归呢?
我们就按照杰哥夹阿伟(bushi)的顺序来递归就OK了
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,x;
queue<bool> q;
void addh(int step)
{if(step==0){q.push(1);return ;}else {q.push(0);addh(step-1);q.push(1);addh(step-1);q.push(0);}
}
int main()
{while(!q.empty()){q.pop();}cin>>n>>x;addh(n);int sum=0;while(x--){sum+=q.front();q.pop();}cout<<sum;
}
但是这是朋友的题目我也不知道怎么测试,怕会超时;
但是专家--天际的海浪有给出优化代码;
海浪:完整的解题代码只要统计前x层的肉饼数量就好,不需要生成整个数组
代码:
#include<bits/stdc++.h>
using namespace std;
int a = 0;
int x,n,len=0;
void hb(int l){if(l==0){if (len>=x) return;a += 1;//肉饼len++;}else{if (len>=x) return;//方包 a += 0就不需要了len++;hb(l-1); //(L−1) 级汉堡if (len>=x) return;a += 1;//肉饼len++;hb(l-1); //(L−1) 级汉堡if (len>=x) return;//方包 a += 0就不需要了len++;}
}
int main(){scanf("%d%d",&n,&x);hb(n);printf("%d", a);return 0;
}
?
这篇关于杰哥吃肉饼-c++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!