批量下载的算法问题:

大可山人
博客专家认证
2006-01-12 01:05:10
批量下载的问题:
比如:
(1)http://download.tfol.com/down/desktop/others/20050705/01//b(1).jpg
(2)http://download.tfol.com/down/desktop/others/20050705/(01)//b(1).jpg
(3) http://download.tfol.com/down/desktop/others/(2005)(07)(05)/(01)//b(1).jpg
等等可能是多种组合,括号表示批量下载的起始数字,比如(01)表示两位,(017)表示从017开始下载,类推。这样就有一个循环问题,比如第三个例子就有五个循环,由于这些表达式由用户输入,括号数量未定,所以如何自动根据输入产生对应的多重循环?如果将用户的输入拆分?
...全文
221 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大可山人 2006-01-16
  • 打赏
  • 举报
回复
哪位兄弟可以改成C#的吗?谢谢!
大可山人 2006-01-16
  • 打赏
  • 举报
回复
嗯,已非常感谢。
结贴。
nale 2006-01-16
  • 打赏
  • 举报
回复
void reuse(int i,const vector<int> &begin,const vector<int> &end)
其中的形参i表示矢量的大小。
nale 2006-01-16
  • 打赏
  • 举报
回复
sorry,我只对c++比较熟。
说下思路吧:
读入字符串,把其中的数字部分存入一个string型的矢量中。
然后将string转换成int型存入新的int型的矢量中,调用递归函数
产生多重循环的方法:
上面产生的矢量中的int的个数就是递归的次数。
矢量中的整型用来控制循环的次数。


//begin是存放下限的int型的矢量,end是存放上限的int型的矢量
void reuse(int i,const vector<int> &begin,const vector<int> &end)
{
static int count=0;//这个是我用来计算实际的循环次数的
if (i==1) //当只有一对上下限的时候
{
//begin[begin.size()-i]这个表示下限值,end[end.size()-i]这个表示上限值
for (int index=begin[begin.size()-i];index<=end[end.size()-i];index++)
{
cout<<count<<endl;
count++;
}
return;
}
//当有多对上下限时用递归。当第一次调用时,begin[begin.size()-i]表示矢量中的第一个下限。
for (int in=begin[begin.size()-i];in<=end[end.size()-i];in++)
{
reuse (i-1,begin,end);
}
cout<<endl;
return;
}
nale 2006-01-14
  • 打赏
  • 举报
回复
上面是从
http://*****************(32)(6) //下限
http://*****************(78) (15) //上限
共470个。
nale 2006-01-14
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <string>
using namespace std;

void reuse(int i,const vector<int> &begin,const vector<int> &end)
{
static int count=0;
if (i==1)
{
for (int index=begin[begin.size()-i];index<=end[end.size()-i];index++)
{
cout<<count<<endl;
count++;
}
//str.erase(str.size()-1);
return;
}
for (int in=begin[begin.size()-i];in<=end[end.size()-i];in++)
{
//str.push_back(in);
reuse (i-1,begin,end);
}
cout<<endl;
return;
}
//用两个string型的vector分别存放开始值和终止值。
int main()
{
vector<string> begin; //定义开始值
vector<string> end; //定义终止值
begin.push_back("32");
cout<<begin[0]<<endl;
begin.push_back("6");
cout<<begin[1]<<endl;
end.push_back("78");
end.push_back("15");
//**************定义两个int型的vector存放循环的上下限********************
vector<int> ibegin;
vector<int> iend;
//*******************将字符串转为整型值存入vector<int>******************
const char *temp=begin[0].c_str();
ibegin.push_back(atoi(temp));
temp=begin[1].c_str();
ibegin.push_back(atoi(temp));
temp=end[0].c_str();
iend.push_back(atoi(temp));
temp=end[1].c_str();
iend.push_back(atoi(temp));
//********************************************************
reuse(begin.size(),ibegin,iend);
return 0;

}
大可山人 2006-01-13
  • 打赏
  • 举报
回复
没有想像的那么容易,主要是多重循环的自动产生问题让人头疼
galois_godel 2006-01-12
  • 打赏
  • 举报
回复
进行有效的编号,然后一个for就可以搞定
nale 2006-01-12
  • 打赏
  • 举报
回复
用个递归可以实现多重循环。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧