日记——递归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!!!