StringSort
描述
编写程序,利用std::sort完成一个字符串(std::string类型)的排序(降序)并输出。
输入
输入一行:由大小写字母和数字组成的字符串。
输出
输出排序后的字符串。
输入样例 1
abcde
输出样例 1
edcba
#include<iostream>
#include<string>
#include<vector>
#include<ctype.h>
#include<algorithm>
using namespace std;
bool charSort(char& chr1, char& chr2)
{
char ch1=tolower(chr1);
char ch2=tolower(chr2);
return ch1<ch2;
}
string strSort(string& str)
{
int len1=str.size();
vector<int> vec;
for(int i=0;i<len1;i++)
{
if(isalpha(str[i])) vec.push_back(i);
}
int len2=vec.size();
for(int i=0;i<len2-1;i++)
{
for(int j=0;j<len2-i-1;j++)
{
if(charSort(str[vec[j]],str[vec[j+1]]))
{
swap(str[vec[j]],str[vec[j+1]]);
}
}
}
return str;
}
int main()
{
string str;
while(cin>>str)
{
cout<<strSort(str)<<endl;
}
return 0;
}
StringsSort
描述
编写程序,利用std::sort进行排序。
使用vector容器输入若干个string类型字符串。
对每个字符串中的字符,根据字典序排序(A到Z, a到z)。
对处理之后的字符串,根据字符的逆字典序(z到a,Z到A)排序。
输入
输入第一行为一个正整数N,然后依次输入N个不带空格的字符串。
输出
参考输出样例
输入样例 1
4 C++ ACM AHa MomoDa
输出样例 1
DMamoo AHa ACM ++C
#include<list>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
list<string> li;
for (int i = 1; i <= n; i++)
{
string str;
cin >> str;
sort(str.begin(), str.end());
li.push_back(str);
}
li.sort();
list<string>::reverse_iterator it;
for (it = li.rbegin(); it !=li. rend(); it++)
cout << *it << endl;
return 0;
}
SimpleList
描述
编写程序,定义一个结构体struct Student{ int no; string name;};并用这个结构体练习使用list。包含往list里添加元素以及输出list的所有元素。
struct Student {
int no;
string name;
};
并使用以下main函数测试
int main()
{
std::list<Student> li;
Input(li); //输入
Show(li); //输出
return 0;
}
输入
第一行一个整数n,表示共有n个学生信息
接下来n行,每行是一个整数和一个字符串,分别表示学生的学号和姓名。
输出
按顺序输出list中的所有元素,每个结构体元素占一行。结构体成员之间以逗号空格隔开。
输入样例 1
3 1010101 zhangsan 1010102 lisi 1010103 wangwu
输出样例 1
1010101, zhangsan 1010102, lisi 1010103, wangwu
using namespace std;
void Input(std::list<Student>& li)
{
int n;
cin >> n;
while (n--)
{
Student stu;
cin >> stu.no >> stu.name;
li.push_back(stu);
}
}
void Show(const std::list<Student>& li)
{
std::list<Student>::const_iterator it;
for (it = li.begin(); it != li.end(); it++)
{
cout << (*it).no << ", " << (*it).name << endl;
}
}
CardGame
描述
桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。
当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。
请用std::queue模拟这个过程,依次输出每次扔掉的牌以及最后剩下的牌的编号。
输入
输入正整数n(n<1000000)。
输出
在一行内依次输出每次扔掉的牌以及最后剩下的牌的编号,编号之间用一个空格隔开。所有输出最后加一个换行符。
输入样例 1
7
输出样例 1
1 3 5 7 4 2 6
提示
可以用std::queue实现
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int> q; //声明队列
int n; //输出总的牌数
cin >> n;
for (int i = 0; i < n; i++)
q.push(i + 1); //将1~7放到队列里面去
while (q.size() > 2)
{
cout << q.front() << " "; //输出队列第一个元素
q.pop(); //将队列第一个元素出队
q.push(q.front()); //将现队列第一个元素放入到队尾
q.pop(); //现队列的第一个元素出队
}
while (!q.empty())
{
cout << q.front() << " "; //输出队列中剩余的元素
q.pop();
}
return 0;
}
Marble
描述
现有N个大理石,每个大理石上写了一个非负整数。首先对这些整数从小到大排序,然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,就回答哪个大理石上写着x(如果有多个大理石上出现x,那么回答第一次出现的大理石编号)。排序后的大理石从左到右编号为1~N。
输入
输入包含多组测试数据,每组数据分三行第一行是两个正整数N(N<1000)和Q(Q<1000)第二行是N个非负整数第三行是Q个非负整数。
输出
对于每一个询问(x),如果有第i个大理石上写着x,则输出x found at i,否则输出x not found。格式详见样例。
输入样例 1
4 1 2 3 5 1 5 5 2 1 3 3 3 1 2 3
输出样例 1
5 found at 4 2 not found 3 found at 3
提示
可以直接使用algorithm头文件中的std::sort和std::lower_bound函数,后者的功能是查找大于等于x的第一个位置,