您的位置:首页 > 编程语言 > C语言/C++

练习题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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: