PAT.1005. 德才论 (25)

4 篇文章 0 订阅

看到各种大牛用了各种方法- -好厉害

顺便科普了宏是什么= =虽然实践的并不是很好- -

vector的用法:

#include <vector> 
vector<int>test;//建立一个空的vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2
//或者说将一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)” ,会扩展vector的大小

关于vector的初始化和赋值还有:

vector<string>abc{"a","b","c"};//不用写等号
vector<int>abc(10,1);// 包含10个元素,且值为1 
vector<int>abc{10,1};// 包含2个元素,值分别为10,1

for(int i = 0; i < 10; ++i)    
    abc[i] = i;//对于非空的vector,可以用下标添加数值

//size()函数显示向量的大小。
//begin()函数返回一个指向向量开头的迭代器。
//end()函数返回一个指向向量末尾的迭代器。

sort的用法:

#include <algorithm>
sort(v1.begin(),vi.end(),comp);//用sort函数排序,排序依据是返回值为布尔型的comp函数(比较两个或多个文件)

迭代器的用法:

vecter<int>exp;
vector<int>::iterator iter=exp.begin();
if(iter!=exp.end()){
    cout<<(*iter)<<endl;
    iter++; 
}
//两者的区别主要是后者类似于常量指针,只能读取不能修改。如果vector对象不是常量,两者均可使用。



strcmp的用法:

strcmp(A,B); // 比较两个字符串大小,相等返回0,A比B大返回正数,反之负数。


指针数组:

从指针传递给函数:

从函数返回到指针?


折腾了很久发现自己用数组傻傻的做根本做不出来……

还是学习了大神的作品 终于AC 用到一些还没接触过的STL 继续学习吧!

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
 
using namespace std;
 
struct Student{
    char id[10];
    int mor;
    int tal;
};
 
bool comp(Student a,Student b)
{
    if((a.mor+a.tal)!=(b.mor+b.tal))
        return a.mor+a.tal>b.mor+b.tal;
    else
    {
        if(a.mor!=b.mor)
            return a.mor>b.mor;
        else
            return strcmp(a.id,b.id)<0;
    }
}
 
//当某类考生中有多人
//总分相同时,按其德分降序排列;
//若德分也并列,则按准考证号的升序输出。
int main()
{
    int count=0;
    vector<Student>v1,v2,v3,v4;
    Student students;
     
     
    int N,L,H;
    scanf("%d%d%d",&N,&L,&H);
     
    for(int i=0;i<N;i++)
    {
        scanf("%s%d%d",students.id, &students.mor,&students.tal);
        if(students.mor>=L && students.tal>=L)
        {
            count++;
            if(students.mor>=H && students.tal>=H)
                v1.push_back(students);
            else if(students.mor>=H && students.tal<H)
                v2.push_back(students);
            else if(students.mor<H && students.tal<H && students.mor>=students.tal)
                v3.push_back(students);
            else
                v4.push_back(students);
        }      
    }
     
    sort(v1.begin(),v1.end(),comp);
    sort(v2.begin(),v2.end(),comp);
    sort(v3.begin(),v3.end(),comp);
    sort(v4.begin(),v4.end(),comp);
     
    printf("%d\n",count);
 
    vector<Student>::iterator iter;//迭代器遍历vector
 
    for(iter=v1.begin();iter!=v1.end();iter++)
    printf("%s %d %d\n",iter->id,iter->mor,iter->tal); 
 
    for(iter=v2.begin();iter!=v2.end();iter++)
    printf("%s %d %d\n",iter->id,iter->mor,iter->tal); 
 
    for(iter=v3.begin();iter!=v3.end();iter++)
    printf("%s %d %d\n",iter->id,iter->mor,iter->tal); 
 
    for(iter=v4.begin();iter!=v4.end();iter++)
    printf("%s %d %d\n",iter->id,iter->mor,iter->tal);
     
    return 0;  
     
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值