第一天题解:数的计算
题目描述
我们要求找出具有下列性质数的个数(包含输入的自然数nn):
先输入一个自然数nn(n \le 1000n≤1000),然后对此自然数按照如下方法进行处理:
-
不作任何处理;
-
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
-
加上数后,继续按此规则进行处理,直到不能再加自然数为止.
这道题好像是今天编的最难的一道题…
注意,这是相对于那些类似求最大公约数的题…
解析在代码里
#include<iostream>//习惯打一堆头文件,不喜勿喷 #include<cstdio> #include<cmath> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<map> #include<set> #include<list> #include<utility> using namespace std; int n,ans; void pd(int x){//一个简单的求解函数 ans++;//答案累加 for(int i=1;i<=x/2;i++)//把从1到x/2都递归一遍 pd(i); return; } int main() { cin>>n; pd(n); cout<<ans;//完美的输出 return 0; }
注意:
这种偷懒的方法只是因为数据太水
想要过洛谷的同学可以参考一下洛谷神犇发的题解。
总结:
不要把问题想得太复杂,不要傻傻地去存每一个状态,存开头一个数就行
浙公网安备 33010602011771号