程序设计实习第二讲

上传人:ldj****22 文档编号:48508392 上传时间:2018-07-16 格式:PPT 页数:43 大小:158KB
返回 下载 相关 举报
程序设计实习第二讲_第1页
第1页 / 共43页
程序设计实习第二讲_第2页
第2页 / 共43页
程序设计实习第二讲_第3页
第3页 / 共43页
程序设计实习第二讲_第4页
第4页 / 共43页
程序设计实习第二讲_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《程序设计实习第二讲》由会员分享,可在线阅读,更多相关《程序设计实习第二讲(43页珍藏版)》请在金锄头文库上搜索。

1、程序设计实习 第二讲内容提要lPOJ简介l例题1:Packetsl例题2:校门外的树l例题3:生理周期l例题4:确定进制l例题5:日历问题p 网址及功能 http:/ p 建立帐号p 提交作业p 查看结果p 出错类型POJ系统说明出错类型 Runtime Error 运行时错Complie Error 编译错Wrong Answer 答案错Presentation Error 格式错Time Limit Exceed 超时例题1:POJ 1017 Packets (课本P92)l题意l已知:有6*6 的大箱子和 1*1,2*2,3*3,4*4, 5*5,6*6 的木块,箱子高度和木块一样l问:

2、给定各种木块的数目,求最少需要多少个大 箱子来装?l例如:l输入:0 0 4 0 0 1 - 输出 2l输入:7 5 1 0 0 0 - 输出 1解题思想: 先放大的,后放小的Packets4*4,5*5, 6*6的块单 独占一个 箱子Packets3*3的块,每4 块占一个箱子, 余下的再占一个 箱子Packets如果箱子里放1个 3*3木块,那么还 能放5个2*2木块, 以及7个1*1木块Packets如果箱子里放2个 3*3木块,那么还 能放3个2*2木块, 以及6个1*1木块Packets如果箱子里放3个 3*3木块,那么还 能放1个2*2木块, 以及5个1*1木块Packetsl解题

3、思想: 先放大的,后放小的1.6*6的木块每个占用一个新箱子;2.5*5的木块每个占用一个新箱子,余下11个1*1的空格;3.4*4的木块每个占用一个新箱子,余下5个2*2的空格;4.3*3的木块每4个占用新一个箱子,不足4个也占一个新箱子 ,分情况余下不同数目的空格;5.2*2的木块先填空格,空格不足开新箱子,每9个2*2的木块 占一个新箱子;6.1*1的木块先填空格,空格不足开新箱子,每36个占一个新 箱子。Packetsl构造法6*6,5*5,4*4 ,3*3,2*2,1*1 个数 b6 b5 b4 b3 b2 b1nTotal - 箱子数 1) 先放好所有 6 * 6, 5 * 5,

4、4 * 4 和3 * 3 的木块 nTotal = b6 + b5 + b4 + (b3+3)/4 4*4, 5*5, 6*6 单独开箱子3*3 每4个占一个箱子,余下的占一个箱子 Packets2)再把2 * 2的塞到放有3*3木块的箱子里设一个数组:int Contain24 = 0, 5, 3, 1 ; Contain2i 表示当3*3木块的数目除以4的余数 分别是0,1,2,3时,会产生多少个能放2*2木块的 空格。用数组纪录某些事实,比写 if else 方便放完2*2的木块后,再算一下有多少1*1的空格, 能否把1*1的木块都填进去,如果不能,也容易 算出还要加多少个箱子#incl

5、ude using namespace std; int main() int b6,b5,b4,b3,b2,b1; /不同大小的木块个数 int nTotal = 0; /最少需要的箱子数目 int c1; /当前能放 1*1 木块的空格数目 int c2; /当前能放 2*2 木块的空格数目 int Contain24 = 0, 5, 3, 1 ; while(1) cinb1b2b3b4b5b6; if (b1 = 0 nTotal = b6 + b5 + b4 + (b3 + 3)/4;/这里有一个小技巧 - (b4+3)/4 正好等于b4除以4向上取整的结果,下同 c2 = 5 *

6、b4 + Contain2b3 % 4; if(b2 c2)nTotal += (b2 - c2 + 8 ) / 9; c1 = 36 * nTotal - 36 * b6 - 25 * b5 - 16 * b4 - 9 * b3 - 4 * b2; if(b1 c1)nTotal += ( b1 - c1 + 35 ) / 36; cout /生理周期 using namespace std; int main()int p,e,i,d,j,no=1;cin p e i d;while(p!=-1 j p e i d;no+;return 0; 6*9 = 42 对于十进制来说是错误的,但是

7、对于13 进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 13+ 2 = 54(10)。 你的任务是写一段程序读入三个整数p, q和 r, 然后确定一个进制 B (2 #include int b2ten(int x,int b); int main( ) int p,q,r,n,b; scanf(“%d“, while(n-) scanf(“%d%d%d“, for(b=2;b= b) return -1; ret *= b; ret += tmpi-0 ; return ret; 问题描述: 在我们现在使用的日历中, 闰年被定义为能 被

8、4整除的年份,但是能被100整除而不能 被400整除的年是例外,它们不是闰年。 例如:1700, 1800, 1900 和 2100 不是闰 年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去得天数 ,你的任务是给出这一天是哪年哪月哪日 星期几。例题5:poj2080日历问题( P130)输入:输入包含若干行,每行包含一个正整数,表示从 2000年1月1日开始逝去的天数。输入最后一行 是1, 不必处理。可以假设结果的年份不会超过 9999。 输出: 对每个测试样例,输出一行,该行包含对应的日期 和星期几。格式为“YYYY-MM-DD DayOfWeek”,

9、 其中 “DayOfWeek” 必须是下面中的一个: “Sunday“, “Monday“, “Tuesday“, “Wednesday“, “Thursday“, “Friday“ and “Saturday“。日历问题样例输入 1730 1740 1750 1751 -1 样例输出 2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday日历问题问题解答此题为典型的日期处理程序,没有难度, 只是编程需要特别细心,日期处理的程序非 常容易出错。 基本思路: 确定星期几;确定年;闰年366天,否则3

10、65天确定月;每个月长短不同确定日。#include int type(int );char week710=“Saturday“, “Sunday“, “Monday“, “Tuesday“, “Wednesday“, “Thursday“, “Friday“;int year2=365,366; /year0表示非闰年的天数,year1表示闰年的天数。int month212=31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31; /month0表示非闰年里每个月的天数,month1表示闰 年里每个

11、月的天数。int main() int days, dayofweek;/days 表示输入的天数,dayofweek表示星期几。 int i = 0, j = 0; while (scanf(“%d“, for(i = 2000; days = yeartype(i); i+)days -= yeartype(i);for(j = 0; days = month type(i) j ; j+)days -= month type(i) j ;printf(“%d-%02d-%02d %sn“,i, j + 1, days + 1, weekdayofweek); return 0; int

12、type(int m) /判断第m年是否是闰年,是则返回1,否则返回0。 if(m % 4 != 0 | (m % 100 = 0 /不是闰年 else return 1; / 是闰年VC便于调试测试数据的办法l将测试数据拷贝,存到某.txt文件中,比如 1661.txtl选 Project|Settings菜单l选debug页l在Program arguments里输入存放测试数据 的文件名 1661.txt 5. 在VC中点击感叹号图标运行程序VC便于调试测试数据的办法1.另一种方法:2.程序里加:3.freopen(“data.in”,”r”,stdin);4.则此后所有scanf, cin 语句都是从 data.in 里读取数据了5.交题前注意将此句去掉

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号