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; }