{算法竞赛入门经典}第二章 习题解答及例题小结

本文详细解析了《算法竞赛入门经典》第二章中的习题,涵盖循环结构的应用、文件操作,特别是数据输入输出的技巧。通过实例分析了如何处理大整数的乘法、找到满足特定条件的数字、打印星号图案等问题,同时讨论了程序计时、输入输出的优化方法,如避免浮点数误差和文件重定向。
摘要由CSDN通过智能技术生成

一.概述

   第二章主要是介绍了循环结构在程序中的使用,同时重点介绍了文件操作(重点是通过文件对数据的输入输出).参见这里.

   由于在算法比赛中对数据的输入输出有着严格的规定,因此如何正确有效地使用这些方法是我们需要注意和多加练习的地方.

 

二.例题分析

     例题2-1涉及到了如何判断整数的问题,可以参见这里.

 

    /*例题2-3*/

 

 

思路: 仍然是循环的使用,只不过循环语句不是简单语句,而是计算阶层,是另外

      一个循环,因此用二重循环就能解决了. 

 

 

 

 

 

 

  由于上面的程序在n比较大的时候会产生溢出,得不出正确结果.所以改用另种方法.

 

  这里需要一点数学知识:要计算只包含加法,减法和乘法的整数表达式除以正整数n

  的余数,可以在每步计算之后对n取余,结果不变.

 

  注意到这个程序用到了头文件time.h中的clock()函数.该函数返回程序目前为止运行

  的时间,这个时间除以常数CLOCKS_PRE_SEC_之后得到的值以"秒"为单位.

  还需注意一点:常数CLOCKS_PER_SECC和操作系统相关,不要直接使用clock()的返回值,

  而应总是除以CLOCKS_PER_SEC.

  并且clock() / CLOCKS_PER_SEC返回的是从程序开始到结束的时间,也就是说输入数据

  的时间也被计算在内,显然,这是我们不希望的.这里可以用命令echo x | test  echo

  运用了"管道"的知识, 而x是输入的数据,test是程序生成的可执行文件名.

  这样就相当于系统自动地输入数据,将手动输入数据的时间造成的误差排除了. 

 

 

 

/*例题2-4*/

 

 

 

 

 

分析:

 

1. 首先遇到的问题是:如何在没给出输入确定个数的变量的输入问题.即不知道变量的个数,

   就无法定义变量的确定名称.

   其实,就算知道了变量的个数,但是这个数量是很大的话,利用scanf来控制输入也是不方

   便的(当然,可以采取数组的形式).因此必须采用一种更加方便的方法.

   就是 while(scanf("%d",&x)) 这种语句.由于scanf返回值是int型,只要有输入返回就是

   成功的变量个数(不等于0).就不断循环.当然,如果输入完毕,可以人为结束:在windows下

   先按enter确定输入完毕,再按

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值