NOI题解(1.10编程基础之简单排序)
来源:互联网 发布:java 数组转字符串 编辑:程序博客网 时间:2024/06/05 00:11
涉及的知识点:
vector容器存储结构体变量
sort自定义排序
稳定排序:冒泡排序
不稳定排序:algorithm中的sort函数,为不稳定排序
题目地址:http://noi.openjudge.cn/ch0110/
01:谁考了第k名
#include <iostream>#include <vector>#include <algorithm>struct stu{int num;float grade;};bool compare(const stu* st1,const stu* st2){return st1->grade>st2->grade;}int main(){int n,k;std::cin>>n>>k;std::vector<stu*> v;for(int i=0;i<n;i++){stu *student = new stu();int num;float grade;std::cin>>num>>grade;student->num = num;student->grade = grade;v.push_back(student);}sort(v.begin(),v.end(),compare);// for(std::vector<stu*>::iterator it=v.begin();it!=v.end();it++)// {// std::cout<<(*it)->num<<" "<<(*it)->grade<<std::endl; // }std::cout<<(*v[k-1]).num<<" "<<(*v[k-1]).grade<<std::endl;// std::cout<<v[k-1]->num<<" "<<v[k-1]->grade<<std::endl;//这两种访问方式都可以return 0;}
02:奇数单增序列
#include <iostream>#include <vector>#include <algorithm>int main(){int n;std::cin>>n;std::vector<int>vc;while(n--){int num;std::cin>>num;if(num%2!=0)vc.push_back(num);}sort(vc.begin(),vc.end());bool firstF = true;for(int i=0;i<vc.size();i++){if(firstF){std::cout<<vc[i];firstF = false;}else{std::cout<<","<<vc[i];}}return 0;}
03:成绩排序
#include <iostream>#include <vector>#include <algorithm>#include <string>struct stu{std::string name;int grade;};//const表示引用变量不会在函数中被改变bool compare(const stu& st1,const stu& st2){if(st1.grade>st2.grade)return 1;else if(st1.grade==st2.grade&&st1.name<st2.name)return 1;elsereturn 0;}int main(){int n;std::cin>>n;std::vector<stu>vc;while(n--){std::string str;std::cin>>str;int grade;std::cin>>grade;stu student;student.name = str;student.grade = grade;vc.push_back(student);}sort(vc.begin(),vc.end(),compare);for(int i=0;i<vc.size();i++){std::cout<<vc[i].name<<" "<<vc[i].grade<<std::endl;}return 0;}
04:奖学金
#include <iostream>#include <vector>#include <algorithm>#include <string>struct stu{int num;int chinese;int math;int english;int sum;};//const表示引用变量不会在函数中被改变bool compare(const stu& st1,const stu& st2){if(st1.sum>st2.sum)return 1;else if(st1.sum == st2.sum && st1.chinese > st2.chinese)return 1;else if(st1.sum == st2.sum && st1.chinese == st2.chinese && st1.num<st2.num)return 1;elsereturn 0;}int main(){int n;std::cin>>n;std::vector<stu>vc;int num=0;while(n--){num++;int chinese,math,english;std::cin>>chinese>>math>>english;stu student;student.num = num;student.chinese = chinese;student.math = math;student.english = english;student.sum = chinese+math+english;vc.push_back(student);}sort(vc.begin(),vc.end(),compare);for(int i=0;i<5;i++){std::cout<<vc[i].num<<" "<<vc[i].sum<<std::endl;}return 0;}
05:分数线划定
#include <iostream>#include <vector>#include <algorithm>#include <string>#include <math.h>struct stu{int num;int score;};//const表示引用变量不会在函数中被改变bool compare(const stu& st1,const stu& st2){if(st1.score>st2.score)return 1;else if(st1.score==st2.score&&st1.num<st2.num)return 1;elsereturn 0;}int main(){int n, legalN;std::cin>>n>>legalN;legalN = floor((double)legalN*1.5);std::vector<stu>vc;while(n--){int num,score;std::cin>>num>>score;stu student;student.num = num;student.score = score;vc.push_back(student);}sort(vc.begin(),vc.end(),compare);int count = 0;for(int i=0;i<vc.size();i++){if(vc[i].score>=vc[legalN-1].score)count++;elsebreak;}std::cout<<vc[legalN-1].score<<" "<<count<<std::endl;for(int i=0;i<count;i++){std::cout<<vc[i].num<<" "<<vc[i].score<<std::endl;}return 0;}
06:整数奇偶排序
#include <iostream>#include <vector>#include <algorithm>//const表示引用变量不会在函数中被改变bool compare(const int &odd1,const int &odd2){return odd1>odd2;}int main(){std::vector<int> odd;std::vector<int> even;for(int i=0;i<10;i++){int num;std::cin>>num;if(num%2==0){even.push_back(num);}else{odd.push_back(num);}}sort(odd.begin(),odd.end(),compare);sort(even.begin(),even.end());for(int i=0;i<odd.size();i++){std::cout<<odd[i]<<" ";}for(int i=0;i<even.size();i++){std::cout<<even[i]<<" ";}return 0;}
07:合影效果
#include <iostream>#include <vector>#include <algorithm>#include <string.h>#include <math.h>#include <iomanip>struct stu{std::string gender;double high;};bool compare1(const stu& st1,const stu& st2){return st1.high<st2.high;}//const表示引用变量不会在函数中被改变bool compare2(const stu& st1,const stu& st2){return st1.high>st2.high;}int main(){int n;std::cin>>n;std::vector<stu>vc;while(n--){std::string gender;std::cin>>gender;double high;std::cin>>high;stu student;student.gender = gender;student.high = high;vc.push_back(student);}sort(vc.begin(),vc.end(),compare1);for(int i=0;i<vc.size();i++){if(!strcmp(vc[i].gender.data(),"male"))std::cout<<std::fixed<<std::setprecision(2)<<vc[i].high<<" ";}sort(vc.begin(),vc.end(),compare2);for(int i=0;i<vc.size();i++){if(!strcmp(vc[i].gender.data(),"female"))std::cout<<vc[i].high<<" ";}return 0;}
08:病人排队
#include <iostream>#include <vector>#include <algorithm>using namespace std;struct p{string id;int age;};/*冒泡排序是一种稳定的排序比较相邻两个元素,交换也只发生在这两个元素之间相等元素及时相邻比较也不会交换因此是稳定的排序方式*/void bubbleSort(vector<p> &pList){for(int i=0;i<pList.size()-1;i++){for(int j=0;j<pList.size()-1-i;j++){if(pList[j].age < pList[j+1].age){//swapp pT;pT = pList[j];pList[j] = pList[j+1];pList[j+1] = pT;}}}}int main(){int k;cin>>k;vector<p> old;vector<p> young;while(k--){p pTemp;string id;int age;cin>>id>>age;pTemp.age = age;pTemp.id = id;if(age>=60)old.push_back(pTemp);elseyoung.push_back(pTemp);}bubbleSort(old);for(int i=0;i<old.size();i++){cout<<old[i].id<<" "<<endl;}for(int i=0;i<young.size();i++){cout<<young[i].id<<" "<<endl;}return 0;}
09:明明的随机数
#include <iostream>#include <vector>#include <set>#include <algorithm>using namespace std;/*生成1-1000的随机数*/// int getRandom()// {// srand(static_cast<unsigned int>(time(0)));// return rand()%1000+1;// }int main(){set<int> m_set;vector<int> m_v;int N;cin>>N;while(N--){int num;cin>>num;if(m_set.count(num)==0){m_set.insert(num);m_v.push_back(num);}}sort(m_v.begin(),m_v.end());cout<<m_v.size()<<endl;for(int i=0;i<m_v.size();i++){cout<<m_v[i]<<" ";}return 0;}或
#include <iostream>#include <vector>#include <set>#include <algorithm>using namespace std;/*生成1-1000的随机数*/// int getRandom()// {// srand(static_cast<unsigned int>(time(0)));// return rand()%1000+1;// }int main(){bool flag[1000]={0};vector<int> m_v;int N;cin>>N;while(N--){int num;cin>>num;if(flag[num]==false){flag[num] = true;m_v.push_back(num);}}sort(m_v.begin(),m_v.end());cout<<m_v.size()<<endl;for(int i=0;i<m_v.size();i++){cout<<m_v[i]<<" ";}return 0;}
10:单词排序
#include <iostream>#include <vector>#include <set>#include <algorithm>#include <string.h>using namespace std;void bubbleSort(vector<string> &sList){for(int i=0;i<sList.size()-1;i++){for(int j=0;j<sList.size()-1-i;j++){if(sList[j]>sList[j+1]){string sT;sT = sList[j];sList[j] = sList[j+1];sList[j+1] = sT;}}}}int main(){string str;vector<string> vc;set<string> m_set;while(cin>>str){vc.push_back(str);}bubbleSort(vc);for(int i=0;i<vc.size();i++){if(m_set.count(vc[i])){continue;}else{m_set.insert(vc[i]);cout<<vc[i]<<endl;}}return 0;}
阅读全文
0 0
- NOI题解(1.10编程基础之简单排序)
- NOI题解(1.1编程基础之输入输出)
- NOI题解(1.5编程基础之循环控制)(待补全)
- NOI题解(1.7编程基础之字符串)(待补全)
- NOI题解(1.8编程基础之多维数组)(待补全)
- NOI题解(1.9编程基础之顺序查找)(待补全)
- NOI题解(1.8编程基础之多维数组)(待补全)
- NOI题解(1.2编程基础之变量定义、赋值及转换)
- NOI题解(1.3编程基础之算术表达式与顺序执行)
- NOI题解(1.4编程基础之逻辑表达式与条件分支)
- NOI题解(1.12编程基础之函数与过程抽象)(待补全)
- NOI题解(1.6编程基础之一维数组)(待补全)
- OJ——1.10编程基础之简单排序
- NOI题库1.11编程基础之二分查找 矩形分割
- 【NOI题解】 3.7数据结构之堆
- 【NOI题解】 3.3数据结构之栈
- 【NOI题解】 3.1数据结构之结构
- 编程考试&&noi原题: 1.11编程基础之二分查找10:河中跳房子
- linux(六)其他常用命令
- Unable to validate using XSD: Your JAXP provider []
- Fraction to Recurring Decimal
- HDU0J #1717 小数化分数
- hdoj 1035 Robot Motion(简单题)
- NOI题解(1.10编程基础之简单排序)
- C/C++内存泄漏及检测
- (156)定制UV
- c++ string比较大小
- tomcat报错:The Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config is missi
- C++求解:平面上有n个点,问总共可以组成多少条直线
- [DP]343. Integer Break
- 2017中国大学生程序设计竞赛
- Linux总结笔记8-搭建DNS服务器