第一篇blog,就简单介绍一下我自己吧:
武汉大学2017级能源动力工程本科生,现在准备跨考华中科技大学软件学院,想在这里记录下自己的学习过程和心得,也不知道最后能不能考上,但是选择了就代表义无反顾吧.
大一学过C语言,专业课分还是不错,不过还是感觉自己0基础,故准备参加今年六月份的PAT乙级考试.特地写0基础PAT乙级刷题之路这一系列blog来记录下这个过程.
现在在疯狂的学习数据结构、组成原理、os和计算机网络.小生专业水平不怎么样,所以恳请各位大佬多多指点.
下面是最近刷到的一道题:
1020 月饼 (25分)
这道题我首先想到了贪心算法,即优先选取单价最高的月饼.下面是我的算法思想:
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);
}