求教中科院的上机题2

zhangpeng12340302 2012-03-22 09:21:30
现列出第二个题,希望大牛给出解答:
c/c++不限

有一个给一个数字字符串,从中截取一个长度为五位的最大的数
...全文
146 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wasd6081058 2012-03-24
  • 打赏
  • 举报
回复
先用一个循环找出字符串中最大的数的下标(可能不止一个,假设有n个),然后把5位数给提取出来,在n个里面找出最大的就OK了。
JieTouLangRen 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mengrongqing20 的回复:]

引用 6 楼 abc814251901 的回复:

一串数字字串,要找最大的五位数,那直接找一个最大的个数,让后看从这个数开始是不是够五位,够了就是最大的了啊

虽然可以解决一些例子 但不是很通用 当最高为相同 还需要再判断后四位 依次类推
[/Quote]
如果最高位只有一个,那么直接就得到结果了
如果最高位有多个,意味着仅仅比较最高位无法得到结果,这时可以比较第四位、第三位,直到比较出大小;也可以将这几个最高位相同的五位数都写出来进行比较,这样多了一个得到五位数的过程,但是减少了比较次数。。
sjjwind 2012-03-24
  • 打赏
  • 举报
回复
动态规划,O(n)的算法
d[x]表示从x-5到x的五个元素的值,
d[x] = d[x-1]+arr[x]-arr[x-5];
然后用一个max去记录d中最大的值就可以了。
zhangpeng12340302 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 merlinfang 的回复:]
好歹也是中科院的学生,这也不会
[/Quote]

大哥,你写写试试啊!
zhangpeng12340302 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mengrongqing20 的回复:]
我理解的是5个连续的数字,下面可在VC下执行
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string strInput = "";
while(1) //循环输入
{
cout << "请输入字……
[/Quote]

厉害,这样做就对了!
mengrongqing20 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 abc814251901 的回复:]

一串数字字串,要找最大的五位数,那直接找一个最大的个数,让后看从这个数开始是不是够五位,够了就是最大的了啊
[/Quote]
虽然可以解决一些例子 但不是很通用 当最高为相同 还需要再判断后四位 依次类推
老鼠期待爱 2012-03-22
  • 打赏
  • 举报
回复
一串数字字串,要找最大的五位数,那直接找一个最大的个数,让后看从这个数开始是不是够五位,够了就是最大的了啊
mengrongqing20 2012-03-22
  • 打赏
  • 举报
回复
我理解的是5个连续的数字,下面可在VC下执行
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string strInput = "";
while(1) //循环输入
{
cout << "请输入字符串, 退出输入Exit:"; //提示输入字符串
cin >> strInput;
if (strInput == "Exit")
{
break;
}
if (strInput.size() < 5) //输入长度小于5时,提醒
{
cout << "输入字符串长度应该大于等于5"<<endl;
continue;
}
string::const_iterator iterBegin = strInput.begin(); //用一对迭代器表示5为字符
string::const_iterator iterEnd = iterBegin;
for (int i=0; i<5; i++) iterEnd++; //strEnd指向最后一位

string strTemp; //用于保存临时的5为字符
int nTemp; //用于保存临时数
int nMaxNum = 0;
while (1)
{
strTemp.assign(iterBegin, iterEnd); //赋予临时的5为字符串
nTemp = atoi(strTemp.c_str());
nMaxNum = nMaxNum > nTemp ? nMaxNum : nTemp; //去最大
if (iterEnd == strInput.end()) //已经到达字符串末尾,退出循环
{
break;
}
iterBegin ++; //向前移位
iterEnd ++;
}
cout << "最大五位数为:"<< nMaxNum <<endl;
}

return 0;
}
yulisheng 2012-03-22
  • 打赏
  • 举报
回复
int strncmp(char *str1, char *str2, int maxlen);
东大坡居士 2012-03-22
  • 打赏
  • 举报
回复
很经典的题目啊,GOOGLE一下很多:
遍历用一个stuct存储最大值及起始位置
flowingfirefly 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 merlinfang 的回复:]

好歹也是中科院的学生,这也不会
[/Quote]

中科院?在哪?我也想去!
merlinfang 2012-03-22
  • 打赏
  • 举报
回复
好歹也是中科院的学生,这也不会

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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