0基础PAT乙级刷题之路(一)

第一篇blog,就简单介绍一下我自己吧:

武汉大学2017级能源动力工程本科生,现在准备跨考华中科技大学软件学院,想在这里记录下自己的学习过程和心得,也不知道最后能不能考上,但是选择了就代表义无反顾吧.

大一学过C语言,专业课分还是不错,不过还是感觉自己0基础,故准备参加今年六月份的PAT乙级考试.特地写0基础PAT乙级刷题之路这一系列blog来记录下这个过程.

现在在疯狂的学习数据结构、组成原理、os和计算机网络.小生专业水平不怎么样,所以恳请各位大佬多多指点.

下面是最近刷到的一道题:

1020 月饼 (25分)
0基础PAT乙级刷题之路(一)_第1张图片
这道题我首先想到了贪心算法,即优先选取单价最高的月饼.下面是我的算法思想:

1.定义一个存放三个变量的结构体,其中rate表示单价
2.定义一个判断条件函数(降序),这里我用的bool类型,用int也可以
3.求得单价后用sort函数进行排序
4.排序后得到的数组就是按单价降序的数组了,这时候,只需要用一个for循环,去求值就好了(详见代码).
#include
#include 
#include
using namespace std;


typedef struct {
    float price ;
    float quantity;
    float rate;
} Tp;

bool cmp(Tp a,Tp b);

int main(void){

    int n,need;
    int i;
    float P=0.00;

    cin>>n>>need;
    vector<Tp> T(n);//讲Tp放入容器,便于赋值和排序
    for(i=0;i<n;i++) 
    	scanf("%f", &T[i].quantity);
    for(i=0;i<n;i++) 
    	scanf("%f", &T[i].price);  
    for(i=0;i<n;i++)
    	T[i].rate=T[i].price/T[i].quantity;

    sort(T.begin(),T.end(),compare);

    for(i=0;i<n;i++){
        if(need>=T[i].quantity){
            P+=T[i].price;
        }
        else{
            P+= need*T[i].rate;
            break;
        }
        need-=T[i].quantity;
    }
    printf("%.2f",P);

    return 0;
    
}
//写降序判断函数
bool compare(Tp a,Tp b){
    return (a.rate>b.rate);
}

你可能感兴趣的:(PAT乙级)