1、1,程序设计导引,闫宏飞12/4/2013,2,计算机解决问题的基本思想和方法,POJ 练习题分类http:/ 基本技能基本输入输出,算术逻辑运算,循环,数组,指针,函数基本应用进制转换,字符串处理,时间和日期处理,高精度计算基本算法简单计算题,排序,枚举,递归,计算机模拟,动态规划,3,概述,简单计算题棋盘走子步数模拟猴子选大王(约瑟夫问题),4,简单计算题,基本过程包括将一个用自然语言描述的实际问题抽象成一个计算问题给出计算过程,并编程实现将计算结果还原成对原来问题的解答关键是读懂问题搞清输入和输出数据的含义及给出的格式通过输入输出样例验证自己的理解是否正确,5,换一种眼光看世界,计算机思
2、维对现实的抽象,while(girl.愿意等() ) for( day=1; day 100,000 AND girl.感情 8 ) continue; else return girl.goto( another_boy); ,现实世界=(模型)=计算机世界,检查程序中是否有错误,6,POJ 1657: Distance on Chessboard,国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如图所示:王、后、车、象的走子规则如下:王:横、直、斜都可以走,但每步限走一格。后:横、直、斜都可以走,每步格数不受限制。车:横、竖均可以走,不能斜走,格数不限。象:只能斜走,格数不限
3、。,7,POJ 1657,Distance on Chessboard (cont.),写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。 Input第一行是测试数据的组数t(0 = t n ; string *begin = new stringn, *end = new stringn ; for ( int i = 0 ; i begini endi ; for ( int i = 0 ; i n ; string begin, end; while ( n- -) cin begin end;int x ; int y ; x = abs( b
4、egin0 - end0 ) ; y = abs( begin1 - end1 ) ;。 ,POJ 1657,if ( x = 0 ,11,本题心得,计算棋盘走子的步数:棋盘的性质、子的规则两种获取参数的方法,第二种方法简短,输入和处理的功能非常明确。,12,POJ 2746: 约瑟夫问题,Description 约瑟夫问题:有只猴子,按顺时针方向围成一圈选大王(编号从到),从第号开始报数,一直数到,数到的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入,后,输出最后猴王的编号。Input 每行是用空格分开的两个整数,第一个是 n, 第
5、二个是 m ( 0 m,n n m; if (n=0) break; for (int i=0; i,for (int i=0; in; i+) int nCounted = 0; while (nCounted m) while (anLoopnPtr = 0) nPtr = (nPtr + 1) % n; nCounted+; nPtr = (nPtr + 1) % n; nPtr-; if (nPtr 0) nPtr = n - 1; if (i = n-1) cout anLoopnPtr strLine1 strLine2; int nLen = strlen(strLine1);
6、int j=0; for (int i=nLen-1; i=0; i-) n1j+ = strLine1i - 0; /把字符转换成数,nLen = strlen(strLine2); j=0; for (int i=nLen-1; i=0; i-) n2j+ = strLine2i - 0; /把字符转换成数 for (int i=0; i=10) / 是否要进位 n1i -= 10; n1i+1+; /进位 ,bool bStartOutput = false; / 标志位,用于跳过多余的0 for (int i=MAX_LEN; i=0; i-) /倒着来 if (bStartOutput=false ,