zoukankan      html  css  js  c++  java
  • 日记——递归or搜索?

    好久没发博了,今天发一篇。

    这两天学校功课比较紧,编程稍微放了放做题量。

    抽空学了学深搜,感谢zah同学给我讲解dfs,浅显易懂,我很快就适应了。

    做了几个基础题,没有想象中那么难(菜鸡BB,因为题简单)

    今天下午刷刷一本通题库,毕竟落了好多。

    然后不愉快的事情发生了。。。

    1151:素数个数


    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 20936     通过数: 11821 

    【题目描述】

    编程求2~n(n为大于2的正整数)中有多少个素数。

    【输入】

    输入n(2≤n≤50000)。

    【输出】

    素数个数。

    【输入样例】

    10

    【输出样例】

    4

    这个题卡了我半小时。。。然后到现在我也不知道我为啥卡了。
    我感觉我的代码没啥毛病啊?莫名其妙就全红。然后从网上扒题解,试运行了几组数(从3到50000随便选的),
    发现我的程序和大佬题解程序给的答案一样啊?不知道为啥。。。(请求大佬帮忙解决)
    上我的全红代码

    //1151
    #include<bits/stdc++.h>
    using namespace std;
    bool prime (int n)
    {
    int p=0;
    for (int i=2;i<=sqrt(n);i++)
    {
    if(n%i==0) p++;
    }
    if(p==0) return true;
    }
    int main()
    {
    int a,num=0;
    cin>>a;
    for (int j=2;j<=a;j++)
    {
    if (prime(j)==1) num++;
    }
    cout<<num;
    return 0;
    }

    上大佬代码

    #include<iostream>
    #include<cmath>
    using namespace std;
    bool judge(int x);
    int main()
    {
    int n;
    int i;
    int sum=0;

    cin>>n;
    for(i=2; i<=n; i++)
    if(judge(i))
    sum++;
    cout<<sum<<endl;

    return 0;
    }
    bool judge(int x)
    {
    int i=2;
    while(i<=floor(sqrt(x))&&(x%i)!=0)
    i++;
    if(i>floor(sqrt(x)))
    return true;
    return false;
    }

    这是从CSDN上一位大佬那抄的,(叫啥我忘了)反正侵权删。。。
    请nb的大佬帮忙解决一下我的小问题。。。
    今晚有个小考试。
    有一个题是这样的

    35.设有一个共有n级的楼梯,某人每步可走1级,也可走2级,也可走3
    级,用递推公式给出某人从底层开始走完全部楼梯的走法。例如:当
    n=3时,共有4种走法,即1+1+1,1+2, 2+1,3。
    求解:用递推公式给出某人从底层开始走完全部楼梯的走法为(用
    F (N)记录不同方案数):
    F(1)=1、F(2)=2、F(3)-4,当N≥4则F(N)=
    A
    [每空5分]
    A考生答案:F(N-1)+F(N-2)+F(N-3)
    该空得分:0
    参考答案: F(N-3)+F(N-2)+F(N-1)
    得分(总):
    0
    我要纠错
    我一看,这个题感觉可以搜索攻略。。。

    然后按耐不住自己的小手。。

    上代码

    #include<bits/stdc++.h>
    using namespace std;
    int way=0;
    void dfs(int n,int step)
    {
    if (step>n)
    {
    return;
    }
    if (step==n)
    {
    way++;
    return;
    }
    else
    {
    dfs(n,step+1);
    dfs(n,step+2);
    dfs(n,step+3);
    }
    }
    int main()
    {
    int a;
    cin>>a;
    dfs(a,0);
    cout<<way;
    return 0;
    }

    然后我把N=4到N=10试了一遍

    成功找出了答案,当时我感觉我好机智(智障)

    居然用编程解决了我平常可能会想到大脑抽筋的数学题!!!

    满满的成就感

    赶紧向我认识的大佬炫耀一波(你看,小弟我nb不?)

    然后他说这个是动态规划(dp);

    你用dfs做出来属于巧合。。。。

    我。。。。

    最要命的是红字部分。。。

    我看着那个零分,流下了动感的泪水......

    五分钟后“我要纠错”就被我按爆炸了。

    (如果于勒竟也在看我的博文,那该多叫人高兴啊!)

    发表于(2020/2/13 零时二分)

    这样算我在讲昨天的事。。。Amazing!!!

     
     
     
  • 相关阅读:
    linux环境下zookeeper下载安装
    vue父组件传值给子组件
    nginx配置负载均衡
    centos安装与配置keepalived+nginx高可用
    centos7安装jdk1.8
    linux系统centos7安装最新版本nginx
    vue项目简单菜单排序
    原生js复制粘贴上传图片前后台代码,兼容firebox,chrome, ie11,亲测有效
    mysql字符集与比较规则
    EL和JSTL表达式的使用
  • 原文地址:https://www.cnblogs.com/zaza-zt/p/12301927.html
Copyright © 2011-2022 走看看