第一天题解:数的计算

题目描述

我们要求找出具有下列性质数的个数(包含输入的自然数nn):

先输入一个自然数nn(n \le 1000n1000),然后对此自然数按照如下方法进行处理:

  1. 不作任何处理;

  2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;

  3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.

 

这道题好像是今天编的最难的一道题…

注意,这是相对于那些类似求最大公约数的题…

解析在代码里

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

注意:

这种偷懒的方法只是因为数据太水

想要过洛谷的同学可以参考一下洛谷神犇发的题解。

总结:

不要把问题想得太复杂,不要傻傻地去存每一个状态,存开头一个数就行

posted @ 2019-06-13 22:12  听取MLE声一片  阅读(219)  评论(1)    收藏  举报