HDU 2451 Simple Addition Expression
题目大意:有一个关于 简单加法表达式 的定义告诉你,就是 选一个数字i 如果 i+(i+1)+(i+2) 它的和,没有任何一位进位的话,那就是 一个i的简单加法表达式,求小于n的表达式数目。
题解:排列组合分类讨论即可……
#include <cstdio> #include <cmath> #include <cstring> using namespace std; char s[15]; int solve(int i,int p){ if(p==1)return s[i]>'2'?3:s[i]-'0'+1; if(s[i]>'3'){return (int)pow(4.0,p-1)*3;} else{ int t1=(int)(pow(4.0,p-2)*3*(s[i]-'0')); int t2=solve(i+1,p-1); return t1+t2; } } int main(){ __int64 n; while(scanf("%I64d",&n)!=EOF){ n--; sprintf(s,"%I64d",n); printf("%d\n",solve(0,strlen(s))); } return 0; }
愿你出走半生,归来仍是少年