练习题c++(一)
2016-04-30 18:17
375 查看
1. 计算字符串最后一个单词的长度,单词以空格隔开。
#include <iostream> #include <string> using namespace std; int main() { string str; string s; getline(cin,str); s = str.substr(str.find_last_of(' ') + 1, str.length()-str.find_first_of(' ')); cout << s.length() << endl; return 0; }2. 计算最少出列多少位同学,使得剩下的同学排成合唱队形
说明:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得Ti<T2<......<Ti-1<Ti>Ti+1>......>TK。 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。总首和尾找 最大上升子序列
#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; int nt = n; vector<int> a; int num; while (nt>0 && cin >> num) { a.push_back(num); nt--; } int maxlen = 0; int temp = 0; int*b = new int ; int*c = new int ; for (int i = 0; i < n; i++) { b[i] = 1; for (int j = 0; j<i; j++) { if ((a[i]>a[j]) && (b[j] + 1>b[i])) b[i] = b[j] + 1; } } for (int i = n - 1; i >= 0; i--) { c[i] = 1; for (int j = n - 1; j > i; j--) { if ((a[i] > a[j]) && (c[j] + 1 > c[i])) c[i] = c[j] + 1; } } for (int i = 0; i<n; i++) if (b[i] + c[i] - 1>maxlen) maxlen = b[i] + c[i] - 1; cout << n - maxlen; delete[] b; delete[] c; return 0; }
相关文章推荐
- C++中istream的使用
- C++中istream的使用
- C语言错误: HEAP CORRUPTION DETECTED
- C++读取Excel 精华
- C++ 访问控制(public,protected,private)
- 【c++】istream 转为 string
- C++学习笔记60——模板编译模型
- c#调用c++制作的基于mfc的ocx控件
- 基本单链表的增删改C++
- 数组&字符串&结构体&共用体&枚举
- c语言中的段和内存四区
- C++定义一个对象和new一个对象的区别与联系
- 【C++ STL系列】迭代器 iterator
- 《More Effective C++》读书笔记-操作符
- 通过表达式构造二叉树 c++
- C++中的istringstream、ostringstream、stringstream
- C++单例的创建与使用
- c语言中的位移位操作
- C语言链表的基本操作
- C++命名空间