| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1516 人关注过本帖
标题:感谢大佬的帮忙,就下面这道题啊啊啊啊
只看楼主 加入收藏
我真傻,真的
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-3-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
感谢大佬的帮忙,就下面这道题啊啊啊啊
已知输入系列中各元素的值至少有两个元素,设计算法,求出该序列中元素的所有最大升降子序列。例如(1.20.30.12.3.5.7.4.6.100)输出为(1.20.30).(30.12.3).(3.5.7).(7.4).(4.6.100)
搜索更多相关主题的帖子: 输出 子序列 元素 算法 最大 
2020-03-15 17:47
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:5 
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>

using namespace std;
int main() {
    string str;
    cout << "请输入:";
    cin >> str;
    int len = str.size();
    // 1.20.30.12.3.5.7.4.6.100
    vector<string> vec;
    int cursor = -1;
    while (cursor < len) {
        int index = cursor + 1;
        cursor = str.find('.', cursor + 1);
        if (cursor < 0) {
            vec.push_back(str.substr(index));
            break;
        }
        vec.push_back(str.substr(index, cursor - index));
    }
    if (vec.size() < 3) {
        cout << '(' << str << ")";
        return 0;
    }
    int markIndex = -1;
    int count = 1;
    for (int i = 1; i < vec.size() - 1; i++) {
        int vec0 = atoi(vec[i-1].c_str());
        int vec1 = atoi(vec[i].c_str());
        int vec2 = atoi(vec[i+1].c_str());
        int cmp_res = (vec0- vec1) * (vec1 - vec2);
        if (markIndex < 0) {
            if (cmp_res > 0) {
                markIndex = i-1;
                count += 2;
            } else {
                cout << '(' << vec[i-1] << '.' << vec[i] << ").";
                markIndex = -1;
                count = 1;
            }
        } else if(cmp_res > 0) {
            count++;
        } else {
            cout << '(';
            for (int j = markIndex; j < markIndex + count; j++) {
                cout << vec[j];
                if(j < markIndex + count - 1) {
                    cout << '.';
                }
            }
            cout << ").";
            markIndex = -1;
            count = 1;
        }
        if (i == vec.size() -2) {
            if (markIndex < 0) {
                cout << '(' << vec[i] << '.' << vec[i+1] << ')';
            } else {
                cout << '(';
                for (int j = markIndex; j < markIndex + count; j++) {
                    cout << vec[j];
                    if(j < markIndex + count - 1) {
                        cout << '.';
                    }
                }
                cout << ")";
            }
        }
    }
    return 0;
}


[此贴子已经被作者于2020-3-15 20:12编辑过]


剑栈风樯各苦辛,别时冰雪到时春
2020-03-15 20:10
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:5 
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2020-3-16 10:11编辑过]

收到的鲜花
  • 叶纤2020-03-17 18:01 送鲜花  2朵   附言:抛去教育方式其实蛮好的
2020-03-16 10:07
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:5 
题主 你的问题描述不够详细
需要确定一下 输入元素 会不会有相同元素
比如
1 2 3 4 1 1 1 2 3
如果存在相同元素 按照题目要求 会出现
1 2 3 4
4 1 1 1
1 1 1 2 3
那么 前面2位的实现 应该都是错了

顺便说一点题外话
3楼的代码里面 cout << ends;
这个做法是错误的 ends 不是给cout使用的参数
不要被误导

https://zh.
2020-03-17 15:37
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:5 
回复 4楼 lin5161678
那个在cpp中是可以cout<<ends;的ends的作用是在缓冲区插入一个空终止作为字符串来使用,而且一般和std :: basic_ostream一起使用
最好还是查清楚再吐槽,对的错的不能乱说啊

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-17 17:18
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
虽然我不赞同xianfajushi图片式和博客式的教育方法,而且代码很脑筋急转弯,关键逻辑的地方没有括号,说明他的运算符优先级已经掌握在心中了,不过还有很多值得学习的地方,先花花送一朵,就是对于新手不怎么友好,容易造成劝退,学cpp的本来就很少能坚持下去的,自学的更少了,不过还是增加新手的学习兴趣比较好,xianfajushi有句话说的很好,帮助他人的同时也是帮助自己,好人做到底,怎样才能一举两得呢?自己可以学习的到,新手也能有兴趣

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-17 17:58
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用叶纤在2020-3-17 17:18:03的发言:

那个在cpp中是可以cout<<ends;的ends的作用是在缓冲区插入一个空终止作为字符串来使用,而且一般和std :: basic_ostream一起使用
最好还是查清楚再吐槽,对的错的不能乱说啊

ends的作用是在缓冲区插入一个空终止作为字符串来使用
所以
cout << ends;
等于
cout << '\0';
'\0'是不可显示字符
在不同环境运行环境表现不一样
有的地方不输出
图片附件: 游客没有浏览图片的权限,请 登录注册

有的地方输出空格
图片附件: 游客没有浏览图片的权限,请 登录注册

甚至有的地方输出 a
https://bbs.

所以我说 cout << ends 是错的 ends不是给cout使用的参数
你自己也说了是和std :: basic_ostream一起使用
 

[此贴子已经被作者于2020-3-17 18:27编辑过]


https://zh.
2020-03-17 18:21
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 6楼 叶纤
我不说 你自觉你需要多长时间才能了解到 cout<<ends 这个做法存在问题?

https://zh.
2020-03-17 18:23
快速回复:感谢大佬的帮忙,就下面这道题啊啊啊啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020188 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved