Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2164627
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: C/C++

2011-07-27 17:36:20

问题:
  1. /*
  2.   下面这段C程序想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案。
  3.    */
  4. int n = 20 ;
  5. for ( int i = 0 ; i < n; i -- )
  6. {
  7.      printf( " - " );
  8. }
开动你的脑筋:
简单分析一下程序不难看出,“粗心的程序员”把i++写成了i--,导致循环不能执行20次。因此,我们的最终目的就是让for循环执行20次。题目的要求是只能增加或修改一个字符,这么一来,可以修改的也只有"int n=20"和"for (int i=0;i 解题的关键就是在for循环条件里下功夫。
 
首先我们尝试一下修改"int i=0"中的i值,由于要同时满足i<20和i-20>=20,即40<=i<20,显然不可能。
接着,尝试修改"i-20",那么每次循环依次是0>-20,-1>-20 ... -19>-20正好能运行20次,符合题意!这样,第一种解法就出来了:
  1. 1 int n = 20 ;
  2. 2 for ( int i = 0 ; - i < n ; i -- )
  3. 3 {
  4. 4 printf( " - " );
  5. 5 }
再看看修改"i--"有没有希望,改成i++显然是不行了,那改一下变量呢?n--?竟然是可以的!每次循环的条件为0<20,0<19 ... 0<1,同样是20次循环,太神奇了! 这题告诉我们for(int i=0; i ,虽然我们平常几乎不这么写,因为n往往是不可变的(比如特定数组的长度,容器的size等)。
解法二:
  1. 1 int n = 20 ;
  2. 2 for ( int i = 0 ; i < n; n -- )
  3. 3 {
  4. 4 printf( " - " );
  5. 5 }
回到修改"i
解法三:
  1. 1 int n = 20 ;
  2. 2 for ( int i = 0 ; i + n ; i -- )
  3. 3 {
  4. 4 printf( " - " );
  5. 5 }
转自:http://ruilin215.iteye.com/blog/1132832


阅读(683) | 评论(0) | 转发(0) |
0

上一篇:JDBC批量插入

下一篇:通讯录管理系统(C)

给主人留下些什么吧!~~