欢迎来到天天文库
浏览记录
ID:20882837
大小:312.00 KB
页数:22页
时间:2018-10-17
《noip2016普及组复赛试题讲解(c++版本)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、NOIP2016普及组复赛题解NOIP2016普及组C++借鉴百度文库PASCAL版本:https://wenku.baidu.com/view/9aafb5f30342a8956bec0975f46527d3240ca6dc.html-2-第1题“买铅笔”简述P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小朋友们发礼物。现在P老师想
2、知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱?【分析】送分题,数据量少,直接模拟即可。当然,“小心撑得万年船”,“大意失荆州”-3-例程C++#includeusingnamespacestd;intmain(){longn,i,s,mins=100000000;//n铅笔数量,i循环变量,s费用,mins最小费用longc[4],p[4];//三种铅笔的数量和价格cin>>n;for(i=1;i<4;i++){cin>>c[i]>>p[i];if(n%c[i]==0)s=n/c[i]
3、*p[i];//正好整包elses=(n/c[i]+1)*p[i];//有多余,再来一包if(mins>s)mins=s;//判断那种买法最省钱}cout<4、位数字是回文的,当且仅当从左向右读和从右向左是相同的例如:2016年11月19日,表示为20161119,它不是回文的2010年1月2日,表示为20100102,它是回文的。求:在他指定的两个日期之间包含这两个日期本身),有多少个真实存在的日期是回文的。-5-确定解题思路一年是365天,如果闰年是366天。月日构成的数字最多只有366个。第一步:构造出所有的日期(后四位)第二步:利用回文的规则,构造出相应的年份第三步:判断这个年份和日期在不在区间内例如:8月15日,日期写成0815对应回文的年份是:5180年判断51800815这一天在不5、在(指定的起始日期)到(指定的终止日期)之间程序时间复杂度为O(366)-6-主程序#includeusingnamespacestd;intmain(){longi,j,y,m,d,t,date1,date2,sum=0;//i,j循环变量,y对应日期,m月倒置的数值,d日倒置的数值longms[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};cin>>date1>>date2;//输入起始结束日期for(i=1;i<=12;i++){m=i%10*10+i/10;//1-126、月份倒置之后的值t=ms[i];for(j=1;j<=t;j++)-7-主程序d=j%10*10+j/10;//1-t日倒置之后的值y=(d*100+m)*10000+i*100+j;//对应回文的日期if(y>=date1&&y<=date2)sum++;//判断这个日期在不在查询范围内}}cout<7、例如:2014,可以组成20144102我们只要判断20144102是不是合法的日期就可以了就算年份的范围是1000~9999,也只要计算9000次就可以了-9-程序框架输入数据fori=day_startdiv10000//取年份<=day_enddiv10000//循环起始到结束年份if(check(i))//判断i年对应的日期是否符合要求特别注意:还要判断这个日期是否在范围内-10-第3题“海港”简述小K按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti(单位:秒),船上的乘客数量ki,以及每8、名乘客的国籍x(i,1),x(i,2),…,x(i,k)。小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的
4、位数字是回文的,当且仅当从左向右读和从右向左是相同的例如:2016年11月19日,表示为20161119,它不是回文的2010年1月2日,表示为20100102,它是回文的。求:在他指定的两个日期之间包含这两个日期本身),有多少个真实存在的日期是回文的。-5-确定解题思路一年是365天,如果闰年是366天。月日构成的数字最多只有366个。第一步:构造出所有的日期(后四位)第二步:利用回文的规则,构造出相应的年份第三步:判断这个年份和日期在不在区间内例如:8月15日,日期写成0815对应回文的年份是:5180年判断51800815这一天在不
5、在(指定的起始日期)到(指定的终止日期)之间程序时间复杂度为O(366)-6-主程序#includeusingnamespacestd;intmain(){longi,j,y,m,d,t,date1,date2,sum=0;//i,j循环变量,y对应日期,m月倒置的数值,d日倒置的数值longms[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};cin>>date1>>date2;//输入起始结束日期for(i=1;i<=12;i++){m=i%10*10+i/10;//1-12
6、月份倒置之后的值t=ms[i];for(j=1;j<=t;j++)-7-主程序d=j%10*10+j/10;//1-t日倒置之后的值y=(d*100+m)*10000+i*100+j;//对应回文的日期if(y>=date1&&y<=date2)sum++;//判断这个日期在不在查询范围内}}cout<7、例如:2014,可以组成20144102我们只要判断20144102是不是合法的日期就可以了就算年份的范围是1000~9999,也只要计算9000次就可以了-9-程序框架输入数据fori=day_startdiv10000//取年份<=day_enddiv10000//循环起始到结束年份if(check(i))//判断i年对应的日期是否符合要求特别注意:还要判断这个日期是否在范围内-10-第3题“海港”简述小K按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti(单位:秒),船上的乘客数量ki,以及每8、名乘客的国籍x(i,1),x(i,2),…,x(i,k)。小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的
7、例如:2014,可以组成20144102我们只要判断20144102是不是合法的日期就可以了就算年份的范围是1000~9999,也只要计算9000次就可以了-9-程序框架输入数据fori=day_startdiv10000//取年份<=day_enddiv10000//循环起始到结束年份if(check(i))//判断i年对应的日期是否符合要求特别注意:还要判断这个日期是否在范围内-10-第3题“海港”简述小K按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti(单位:秒),船上的乘客数量ki,以及每
8、名乘客的国籍x(i,1),x(i,2),…,x(i,k)。小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的
此文档下载收益归作者所有