网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月25日漏签0天
c++吧 关注:653,201贴子:2,117,962
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1回复贴,共1页
<<返回c++吧
>0< 加载中...

递归好像出了点问题

  • 只看楼主
  • 收藏

  • 回复
  • 补钱永华
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
主要思路就是先筛出素数出来,再通过在素数容器每次找两个数得到的公差来找出这个等差数列
但是运行结果好像不尽人意。。。。。。。。。。。。。。。。。
从昨天一直到现在都在搞这东西,实在没有办法了就来贴吧 求各位老哥指点下
#include<iostream>
#include<vector>
using namespace std;
typedef vector<int> ivec;
//递归
bool zhaosushu(ivec v,int d,int c,ivec::iterator pos)
{
if(c==10)//找到10个数,返回true后输出
return true;
else if(*(++pos)==(*pos) + d)
{ //判断条件为 下一个数 = 上一个 + 公差
++pos;//迭代器 下移 一位 ,用于在下一递归
++c;// 计数+1
return zhaosushu(v,d,c,pos);
}
else if(*(++pos) != (*pos) + d)
return false;//不符合等差数列条件,返回false ,继续找数列下一轮的第一、二个数
}
int main()
{
int e=1;//用于控制while循环
ivec v1;
ivec v;
while(e)
{
for(int i=0;i<=500;++i)//在向量容器中插入500个 1,因为下标从0开始,所以要用<=号,插入多一个 1
{//此部分用于在一次500以内的素数中若找不到,再在容器中插入500个1
v.push_back(1);
}
int k=v.size();
// 埃拉托斯特尼筛法 筛选素数
for(int i=2;i<=k;++i)
{
if(v[i])
{
for(int j=2*i;j<k;j+=i)
{
v[j]=0;//下标为合数的数 赋值为 0;
}
v1.insert(v1.end(),i);/*把素数放入到另一个向量容器中,其实这里有个错误,每执行一次while循环,
都会插入上一次while循环的质数,原想改,但是这个while循环好像只执行了一次
就没有结果了
*/
}
}
for(ivec::iterator pos=v1.begin();pos!=v1.end();++pos)//等差数列的第一个 数的位置
{
++pos;
for(ivec::iterator pos1=pos;pos1!=v1.end();++pos1)// 等差数列的第二个 数的位置
{
int d=(*pos1)-(*pos);//等差数列的公差
int c=2;//计数数列中的数目,因由第一个和第二个得到公差,接下来找剩余的8个数,所以c=2;
if(zhaosushu(v1,d,c,pos1))// 参数1 为装有全是素数的容器
{// 参数4 为等差数列的第二个数的迭代器
cout<<d<<endl;//输出公差
cout<<*pos<<" "<<*pos1<<endl;//输出等差数列的前两个数
e=0;//用于跳出while循环
}
}
}
}
return 0;
}
运行结果


  • 萌猫哒哒
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有任何问题可以来有大神免费解答


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回c++吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示