PAT考试乙级1055(C++语言实现) (重点题目)(思路)

来源:互联网 发布:网络借贷暂行办法全文 编辑:程序博客网 时间:2024/06/05 15:01
#include<iostream>#include<cstring>#include<algorithm>using namespace std;struct Student{    char name[10];    int height;};bool cmp(struct Student s1,struct Student s2){     if(s1.height!=s2.height){       //身高不相同,身高矮的在前        return s1.height<s2.height;    }    else return strcmp(s1.name,s2.name)>0;//身高相同,比较名字,字典序大的在前}void output(Student s[],int begin,int end){    Student temp[end-begin+2];//注意此处数组的大小    int m=(end-begin)/2+1;      int count_left=0;       //左边到了第几个    int count_right=0;      //右边到了第几个    bool should_right=false;//是否该右边了    for(int i=end;i>=begin;i--){        if(i==end)  temp[m]=s[i];//先把最大值放在中间        else{            if(should_right){                count_right++;                temp[m+count_right]=s[i];                should_right=false;             }            else{                count_left--;                temp[m+count_left]=s[i];                should_right=true;            }               }       }    for(int i=m+count_left;i<=m+count_right;i++){        if(i!=(m+count_left))   cout<<" ";        cout<<temp[i].name;    }       cout<<endl;}int main(){    int N,K,i,j,last;    Student s[10001];    cin>>N>>K;    for(i=1;i<=N;i++){        cin>>s[i].name>>s[i].height;    }    sort(s+1,s+N+1,cmp);    last=(K-1)*(N/K)+1;    output(s,last,N);    for(i=last-N/K;i>=1;i=i-N/K){        output(s,i,i+N/K-1);    }    return 0;}

代码参考:
http://blog.csdn.net/wanmeiwushang/article/details/51591972

阅读全文
0 0
原创粉丝点击