2026.3.16oj总结
1.学生信息问题描述你的程序需要从标准输入设备通常为键盘中输入N1≤N≤10个学生的信息每项信息包含该学生的编号、姓名、性别、年龄、成绩共五项按成绩进行排序然后按成绩从低到高输出输入保证没有相同的成绩。#includeiostream#includestring#include algorithmusing namespace std;struct Student {int num;string name;string sex;int age;int score;};bool cmp(Student a, Student b) {return a.score b.score;}int main() {int N;cin N;Student stu[10];for (int i 0;i N;i) {cin stu[i].num stu[i].name stu[i].sex stu[i].age stu[i].score;}sort(stu, stuN,cmp);for (int i 0;i N;i) {cout stu[i].num stu[i].name stu[i].sex stu[i].age stu[i].score endl;}}2.成绩统计问题描述每次通过键盘输入5位学生如下表所示的数据然后计算并输出每位学生的平均成绩再输出数学成绩最高的学生的姓名及成绩。#includeiostream#includestring#include algorithm#include vectorusing namespace std;struct Student {string name;int ms;int ps;};bool cmp(Student a, Student b) {return a.ms b.ms;}int main() {Student stu[5];vectorint avar;for (int i 0;i 5;i) {cin stu[i].name stu[i].ms stu[i].ps;int a (stu[i].ms stu[i].ps) / 2;avar.push_back(a);}for (int i 0;i 5;i) {cout stu[i].name avar[i] endl;}sort(stu, stu 5, cmp);cout stu[0].name stu[0].ms stu[0].ps;}3.摩托车问题描述明明是一家摩托车厂的老板他的厂为了迎合市场中不同消费者的需求会生产不同型号的摩托车这为明明的厂带来了不小的收益。有一次一位大客户来到明明的厂洽谈生意他需要采购一批型号各不相同的摩托车然后他把需要的摩托车的型号告诉了明明接着明明就需要在他所生产的摩托车中寻找到型号匹配的如果有则卖给那个客户如果没有则只能对客户说抱歉了。明明忙了一个上午终于把那个客户需要的摩托车全部配齐了然后成功的谈成了这笔生意。 事后明明发现了一个问题如果每个客户来都需要这样忙一个上午才能够知道自己生产的摩托车能否满足客户的需要这样的工作效率实在太低了更有可能损失很多客户这样对工厂未来的发展也是很不利的。于是明明找到了你你是一名程序设计专家明明希望你能够帮他写一个程序程序中记录了他工厂生产的所有摩托车的数据然后当有客户拿着摩托车的订单来洽谈生意时只要在这个程序中输入摩托车的型号数据程序就能够查询出工厂是否生产这类的摩托车这样就能提高明明工厂的工作效率有助于工厂进一步发展。摩托车需要记录的数据有以下一些摩托车的型号摩托车的颜色和摩托车马达的类型。例如客户需要的摩托车型号如下摩托车型号a1a2明明拥有的摩托车类型如下摩托车型号 摩托车颜色 摩托车马达型号a1 yellow r1a3 red r3a4 blue r4从中可以看出明明的工厂只有a1这个型号的摩托车。明明的问题可以归结为写一个程序程序中输入客户需要的摩托车型号和明明工厂拥有的摩托车的型号。在记录明明工厂的摩托车时还要记录摩托车的颜色和摩托车马达的类型。程序要判断明明工厂拥有的摩托车是否能满足客户的需要总结两个结构体结果数组的结构体类型直接用工厂类#includeiostream#includestring#include algorithm#include vectorusing namespace std;struct Factory {string model;string color;string motor;};struct Customer {string model;};bool cmp(Factory a, Factory b) {return a.model b.model;}int main() {int n, m;while(cinnm){vectorFactory fac(m);vectorCustomer cus(n);vectorFactory res;for (int i 0;i n;i) {cin cus[i].model;}for (int i 0;i m;i) {cin fac[i].model fac[i].color fac[i].motor;}for (int i 0;i n;i) {for (int j 0;j m;j) {if (cus[i].model fac[j].model){res.push_back(fac[j]);break;}}}sort(res.begin(), res.end(), cmp);if (res.empty()) {cout Not found! endl;}for (int i 0;i res.size();i) {cout res[i].model res[i].color res[i].motor endl;}}}4。扑克牌问题描述明明和他的三位同学在玩一种非常有趣的扑克牌游戏。在这个游戏中一副牌的大小怪被除去然后把剩下的52张牌随机发给4个人这样每个人的手中就有13张牌。接下来的任务就是每个人把自己手中的牌按一定的顺序整理好。理牌的顺序如下首先按牌的大小整理牌的大小顺序为AKQJT(10)9…2如果牌的大小相等则按如下的花色顺序整理黑桃S红心H方块D草花C。例如有一个人手中拿到的牌如下ST CQ S8 D8 HQ D2 H3 HK H9 H2 HT SK CK经过整理后的牌的顺序会变为SK HK CK HQ CQ ST HT H9 S8 D8 H3 H2 D2其中SK、HK、CK这三张牌的大小相同都是K于是根据花色的顺序整理先是S再是H最后是C所以顺序为SK、HK、CK。当每个人把自己手中的牌整理完后他们就开始玩非常有趣的扑克游戏了。但是玩着玩着他们发现了一个问题理牌的时间太长这使得他们玩牌的兴致被大大减弱了。于是他们来求助于你能否帮他们写一个理牌程序帮助他们理牌这样他们就可以不必把大量的时间花在理牌上面而尽情享受玩牌的乐趣了。明明的问题可以归结为给你每人手中顺序打乱的13张牌一共有4套然后通过题目中描述的理牌顺序理好这4套牌。总结规范化处理将花色牌都转化为数字方便比较二维数组与结构体定义牌的结构二维数组表示4个人手上各自拿了13张牌类型就是牌输入输入时双层循环people数组需要被赋值people[i][j].suit people[i][j].s[0];people[i][j].rank people[i][j].s[1];排序对people数组进行排序#includeiostream#includestring#include algorithm#include vectorusing namespace std;struct Card {string s;char suit;char rank;};//规范化处理int getSuit(char suit) {if (suit S) return 4;else if (suit H) return 3;else if (suit D) return 2;else if (suit C) return 1;}int getRank(char rank) {if (rank A) return 14;else if (rank K) return 13;else if (rank Q) return 12;else if (rank J) return 11;else if (rank T) return 10;else return rank - 0;}bool cmp(Card a, Card b) {if (getRank(a.rank) ! getRank(b.rank)){return getRank(a.rank) getRank(b.rank);}else{return getSuit(a.suit) getSuit(b.suit);}}int main() {int n;cin n;bool firstcase true;while (n--) {if (!firstcase) {cout endl;}firstcase false;Card people[4][13];for (int i 0;i 4;i) {//玩家for (int j 0;j 13;j) {//牌cin people[i][j].s;people[i][j].suit people[i][j].s[0];people[i][j].rank people[i][j].s[1];}}//对每一个玩家的牌进行排序for (int i 0;i 4;i) {sort(people[i], people[i] 13, cmp);}for (int i 0;i 4;i) {for (int j 0;j 13;j) {cout people[i][j].s;if (j 12) cout ;}cout endl;}}}5.混合牛奶问题描述牛奶包装是一个如此低利润的生意,所以尽可能低的控制初级产品(牛奶)的价格变得十分重要。请帮助快乐的牛奶制造者(Merry Milk Makers)以可能的最廉价的方式取得他们所需的牛奶。快乐的牛奶制造公司从一些农民那购买牛奶每个农民卖给牛奶制造公司的价格不一定相同。而且,如一头母牛一天只能生产一定量的牛奶,农民每一天只有一定量的牛奶可以卖。每天,快乐的牛奶制造者从每个农民那购买一定量的牛奶,少于或等于农民所能提供的最大值。给出快乐牛奶制造者的每日的牛奶需求,连同每个农民的可提供的牛奶量和每加仑的价格,请计算快乐的牛奶制造者所要付出钱的最小值。注意: 每天农民生产的牛奶的总数对快乐的牛奶制造者来说足够的。总结最后一步的计算need要置为0#includeiostream#includestring#include algorithm#include vectorusing namespace std;struct Milk {int price;int num;};bool cmp(Milk a, Milk b) {return a.price b.price;}int main() {int N, M;cin N M;vectorMilk farmer(M);for (int i 0;i M;i) {cin farmer[i].price farmer[i].num;}sort(farmer.begin(),farmer.end(),cmp);int sum 0;int need N;for (int i 0;i farmer.size()need0;i) {//需要这个农民的全部牛奶if (farmer[i].num need) {sum sum (farmer[i].price) * farmer[i].num;need need - farmer[i].num;}//只需要部分牛奶else {sum sum (need)* farmer[i].price;need 0;}}cout sum;}6.挤牛奶问题描述三个农民每天清晨5点起床然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时秒为单位)给他的牛挤奶一直到1000时刻。第二个农民在700时刻开始在 1200时刻结束。第三个农民在1500时刻开始2100时刻结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300时刻到1200时刻)而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200时刻到1500时刻)。 你的任务是编一个程序读入一个有N个农民(1 N 5000)挤N头牛的工作时间列表计算以下两点(均以秒为单位): 最长至少有一人在挤奶的时间段。 最长的无人挤奶的时间段。总结结构体定义集体结构体开始时间和结束时间。、排序按照开始时间的前后进行排序合并区间设置第一个区间为开始时间和结束时间后面从第二个开始遍历依次如果有重复区间就将当前结束时间更新为这个区间的结束时间。如果碰到了没有重叠的部分就将当前结束时间-当前开始时间就为工作时间空闲时间则等于现在这个区间的开始时间-当前结束时间这是间隔。#includeiostream#includestring#includevector#include algorithmusing namespace std;struct Farmer {int start;int end;};bool cmp(Farmer a, Farmer b) {return a.start b.start;}int main() {int N;cin N;vectorFarmer time(N);for (int i 0;i N;i) {cin time[i].start time[i].end;}sort(time.begin(), time. end(),cmp);//合并区间int maxwork 0;int maxfree 0;int currentstart time[0].start;int currentend time[0].end;for (int i 1;i N;i) {if (time[i].start currentend) {//区间有重叠if (time[i].end currentend) {currentend time[i].end;}}else {int work currentend - currentstart;//计算工作时长if (work maxwork){maxwork work;}int free time[i].start - currentend;if (free maxfree) {maxfree free;}//开始新的区间currentstart time[i].start;currentend time[i].end;}}//forint lastwork currentend - currentstart;if (lastwork maxwork) {maxwork lastwork;}cout maxwork maxfree;}7.顺序的分数题描述输入一个自然数N请写一个程序来增序输出分母小于等于N的既约真分数(即无法再进行约分的小于1的分数)总结#includeiostream#includestring#includevector#include algorithmusing namespace std;struct Fenshu {int fenmu;int fenzi;};bool cmp(Fenshu a, Fenshu b) {return double(a.fenzi) / a.fenmu double(b.fenzi) / b.fenmu;}bool isYueZhen(Fenshu a) {for (int i 2;i a.fenzi;i) {if (a.fenzi% i 0 a.fenmu % i 0) return false;}return true;}int main() {int N;cin N;vectorFenshu fs;for (int i1;iN;i){//分母for (int j 0;j i;j) {if (j 0 i 1) continue;Fenshu f;//定义一个数字存储当前的分数f.fenmui;f.fenzij;if (isYueZhen(f)){fs.push_back(f);}}}sort(fs.begin(), fs.end(), cmp);for (int i 0;i fs.size(); i) {cout fs[i].fenzi / fs[i].fenmu endl;}}8.01背包问题场景你有一个背包容量为C有n个物品每个物品有重量w[i]价值v[i]目标在不超过背包容量的情况下装价值总和最大的物品#includeiostream#includestring#includevector#include algorithmusing namespace std;int main() {int n, c;//物品个数背包总容量cin n c;int w[1005], v[1005];for (int i 0;i n;i) {cin w[i] v[i];}int dp[1005] { 0 };for (int i 0;i n;i) {for (int j c;j w[i];j--)//防止重复放{dp[j] max(dp[j], dp[j - w[i]] v[i]);//比较加不加这个物品哪个价值高}}cout dp[c] endl;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2417949.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!