sort
读入n条学生成绩记录,包括学生姓名,总成绩,语文,数学和英语成绩,要求按总成绩从高到低输出ñ条记录,每条记录占一行。总成绩相同时按语文成绩从高到低输出,语文成绩相同时按数学成绩从高到低输出。 (没有两个人的成绩完全一样)
#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//sort 函数排序
struct stu
{
string zz;//姓名
int z,a,b,c;//总分,语文,数学,英语
}I[105];
bool cmp(stu a,stu b)
{
if(a.z==b.z)//按照总分大的排序,总分一样的话,按照语文从大到小排序,,,,,,
{
if(a.a==b.a)
{
if(a.b==b.b)
return a.c>b.c;
return a.b>b.b;
}
return a.a>b.a;
}
return a.z>b.z;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>I[i].zz>>I[i].z>>I[i].a>>I[i].b>>I[i].c;
sort(I,I+n,cmp);
for(int i=0;i<n;i++)
cout<<I[i].zz<<' '<<I[i].z<<' '<<I[i].a<<' '<<I[i].b<<' '<<I[i].c<<endl;
return 0;
}
vector
字符串有些是对称的,有些不是对称的,请将那些对称的字符串安从小到大的顺序输出,字符串先以长度论大小,如果长度相等,再以ASCII码值为排序标准;
//输入n个字符串,然后按照以下规则输出 对称 的字符串
//规则:优先输出长度小的,如果长度相等,输出字典序小的
#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//排序!!!!!!!!!!!!
bool cmp(string a,string b)
{
return a.length()!=b.length()? a.length()<b.length():a<b;
}
int main()
{
int n;
cin>>n;
string s;//输入的
string temp;//交换的
vector<string>v;//用动态数组存储将要输出的对称的字符串
for(int i=0;i<n;i++)
{
cin>>s;
temp=s;//string直接赋值
reverse(temp.begin(),temp.end());//翻转
if(s==temp)
v.push_back(s);
}
sort(v.begin(),v.end(),cmp);//对vector进行sort排序
for(int i=0;i<v.size();i++)
cout<<v[i]<<endl;//直接输出
return 0;
}
Huffman树
/*
//哈夫曼树
//找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,
//然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。
//2. 重复步骤1,直到{pi}中只剩下一个数
#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)//vector的排序
{
return a>b;
}
int main()
{
int n;
cin>>n;
vector<int>q;
int a;
int ans=0;
for(int i=1;i<=n;i++)
{
cin>>a;
q.push_back(a);
}
while(q.size()>1)
{
//方法一
sort(q.begin(),q.end()); //默认从小到大排序也行
int i=q[0];//访问的话,就直接数组访问就好啦
q.erase(q.begin());
int j=q[0];
q.erase(q.begin());
q.push_back(i+j);
//方法二
//学姐讲的方法
//从大到小排序
sort(q.begin(),q.end(),cmp);
int t=q[q.size()-1]+q[q.size()-2];
q.pop_back();
q.pop_back();
q.push_back(t);
ans += t;
}
cout<<ans;
return 0;
}
*/
map
//输入几个人名,输出一共有多少个人(不重复)
//map自身去重
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
map<string,int>a;//定义map!!!!!!!!!!!!!!!!!!
while(n--)
{
cin>>s;
a[s]=1;//直接赋值进去
}
cout<<a.size();
return 0;
}
//输入几个人名,输出人名和此人名出现的次数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
map<string,int>a;
set<int>::iterator it;//迭代器
while(n--)
{
cin>>s;
if(a.count(s))//如果a中已经有这个人名了,数值就+1
a[s]++;
else //如果没有这个人,就把这个人加到set中去,然后赋值1
a[s]=1;
}
//iterator
//输出!!!!!!!!!!!!
for(auto it=a.begin();it!=a.end();it++)
cout<<it->first<<' '<<it->second<<endl;
return 0;
}