递推|递归|分治
题目:MT2041三角形的个数
最近璃月的海灯节到了,一位来自码蹄集的小码哥正好游历至此,一种有趣的装饰图案引起了他的兴趣:这种图案将一个三角形每条边分为𝑛n等分,然后将对应的等分点相连,使得连成的线段平行于三条边中的一条,这样就构成了大三角套小三角的繁复图案。现在有许多类似的图案,这名学者想知道每个图案中各包含了几个三角形,请你帮帮他。
如图所示是一个二等分的例子:
格式
输入格式:
第一行一个正整数𝑁N,代表图案个数。
接下来N行每行一个正整数𝑛𝑖ni,代表第i个三角形每条边被分为了𝑛𝑖ni等分
输出格式:
输出𝑁N行,每行一个正整数代表第𝑖i个图案中包含的三角形个数
样例 1
输入:
2 2 3
输出:
5 13
#include<bits/stdc++.h>
using namespace std;
int f(int n){if(n==1)return 0;if(n==2)return 1;return(n-1)*n/2+f(n-2);
}
int main( )
{int n,N;cin>>N;while(N--){cin>>n;int sum1=0,sum2=0;for(int i=1;i<=n;i++){sum1+=(n-i+1)*(n-i+2)/2;}sum2=f(n);cout<<sum1+sum2<<endl;} return 0;
}
思路
将三角形分成两部分,一部分头朝上,另一部分头朝下,分别算出他们的公式,最后相加。
题目:MT2044字符串的解码
给你一个字符串,由[
,]
,数字和大写字母组成,现要求对其解码。
字符串中形如[DX]
,表示D个连续的X,例如[4CB]
或[2[2CB]]
都可以表示
一旦出现括号就会有数字,且为正整数,会有两组方括号相邻的情况,如[4A][5B]
。
格式
输入格式:
一行字符串
输出格式:
一行字符串
样例 1
输入:
AC[3FUN]
输出:
ACFUNFUNFUN
#include<bits/stdc++.h>
using namespace std;
string f(){string s,temp;char c;while(cin>>c){if(c=='['){int n;cin>>n;temp=f();while(n--){s+=temp;}}else if(c==']'){return s;}else{s+=c;}}return s;
}
int main( )
{cout<<f()<<endl;return 0;
}
思路
将字符串拆分开,根据条件执行流程。