黑马程序员技术交流社区

标题: 分享一道测试题~~ [打印本页]

作者: 泡沫__opt    时间: 2014-10-20 09:54
标题: 分享一道测试题~~
     用左手手指数数,从1数到n。她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5。接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,如此反复。问最后会停在那个手指上?用编号1、2、3、4、5依次表示大拇指、食指、中指、无名指、小指。
比如:输入样例: 10
          输出样例:2食指

我做出来了,但是,感觉好繁琐……想看看有木有好的做法~~

作者: ll_shitou    时间: 2014-10-20 10:14
是不是做循环,每次循环加一个变量,如果是5,变量改为-1,如果是1,变量改为1,做循环n次就可以了 ,应该代码不是很繁琐
int finger=1;
int fingermove=1;
for(int i=0;i<n;i++){
if(finger==5)fingermove=-1;
if(finger==1)fingermove=1;
finger=finger+fingermove;
}
return finger;
作者: 泡沫__opt    时间: 2014-10-20 11:41
ll_shitou 发表于 2014-10-20 10:14
是不是做循环,每次循环加一个变量,如果是5,变量改为-1,如果是1,变量改为1,做循环n次就可以了 ,应该 ...

嗯~~没有问题啊~~但是你的i初始值应该是1吧?
作者: ll_shitou    时间: 2014-10-20 12:11
哪个初始值啊  手指还是移动还是i,i是1的话就得<=n,这个没什么区别 坐nc
作者: 十万一千    时间: 2014-10-20 12:16
本帖最后由 十万一千 于 2014-10-20 12:44 编辑
  1. <div class="blockcode"><blockquote>package com.itheima.番外;

  2. public class 手指数数 {
  3.         // 用左手手指数数,从1数到n。她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5。
  4.         // 接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,如此反复。
  5.         // 问最后会停在那个手指上?用编号1、2、3、4、5依次表示大拇指、食指、中指、无名指、小指。
  6.         // 比如:输入样例: 10 输出样例:2食指
  7.         public static void main(String[] args) {
  8.                 String[] fingers = { "大拇指", "食指", "中指", "无名指", "小指" };
  9.                 Integer inputNumber = 10;
  10.                 Integer count = 1;
  11.                 Integer tmp = 1;
  12.                 while (inputNumber > 1) {
  13.                         inputNumber--;
  14.                         if (count == fingers.length) {
  15.                                 tmp = -1;
  16.                         } else if (count == 1) {
  17.                                 tmp = 1;
  18.                         }
  19.                         count = count + tmp;
  20.                 }
  21.                 System.out.println((count) + fingers[count - 1]);
  22.         }
  23. }
复制代码



作者: ll_shitou    时间: 2014-10-20 12:23
没明白为啥要用integer,应该是不对的吧 ,最后inputNumber 这个值为1,应该为0才对吧 ,自己看下吧  
作者: 十万一千    时间: 2014-10-20 12:26
ll_shitou 发表于 2014-10-20 12:23
没明白为啥要用integer,应该是不对的吧 ,最后inputNumber 这个值为1,应该为0才对吧 ,自己看下吧   ...

System.out.println(count + fingers[count - 1]); 输入1的话,自动打印了0下标了,
其实用int一样了,我习惯用包装类型了
作者: ll_shitou    时间: 2014-10-20 12:31
恩   ,不过 应该是没必要,你循环的次数不对我说的是,你只循环了9次吧
作者: java_dream    时间: 2014-10-20 13:31
  1. package test;

  2. public class Test001 {
  3.        
  4.         public static void main(String[] args){
  5.                 int count = 10;
  6.                 String c = test(count);
  7.                 System.out.println(c);
  8.         }
  9.        
  10.         public static String test(int count){
  11.                 /**思路:
  12.                  *    1-如果要数的数n<=5,可以直接知道数到哪个手指
  13.                  *    2-如果要数的数6<=n<10,-->5小指-->4无名指-->3中指-->2食指              算第1次
  14.                  *      如果要数的数10<=n<14,-->2食指-->3中指-->4无名指-->5小指           算第2次
  15.                  *      如果要数的数14<=n<18,-->5小指-->4无名指-->3中指-->2食指           算第3次
  16.                  *      依次反复... ...                                     算第r次
  17.                  */
  18.                 String[] fingers = {"1大拇指","2食指","3中指","4无名指","5小指"};
  19.                 if(count<=5){
  20.                         return fingers[count-1];
  21.                 }else{//如果数到n次是偶数次,则当前手指在数组的位置是(count-5)%4
  22.                         //如果数到n次是奇数次,则当前手指在数组的位置是fingers.length-(count-5)%4-1
  23.                         int cur = ((count-5)/4)%2==0 ? fingers.length-(count-5)%4-1 : (count-5)%4;
  24.                         return fingers[cur];
  25.                 }
  26.         }

  27. }
复制代码

作者: 泡沫__opt    时间: 2014-10-21 08:30
~~学习了~~
作者: xiaochongbojue    时间: 2014-10-21 15:07
果然有大牛
作者: 泡沫__opt    时间: 2014-10-21 15:47
java_dream 发表于 2014-10-20 13:31

能告我你是怎么做到的么?
我就没有思路啊……
想了好半天才做出来……
作者: java_dream    时间: 2014-10-22 13:13
泡沫__opt 发表于 2014-10-21 15:47
能告我你是怎么做到的么?
我就没有思路啊……
想了好半天才做出来…… ...

看到这类题目,先不要想着如何用编程语言实现,把自己当成从来没学过编程的人,用正常人的思维去思考问题,找出规律,如果你能用人类的语言描述清楚规律,再翻译成编程语言就OK了!比如这题,看下图分析:


finger.jpg (161.41 KB, 下载次数: 37)

finger.jpg

作者: 泡沫__opt    时间: 2014-10-22 13:24
java_dream 发表于 2014-10-22 13:13
看到这类题目,先不要想着如何用编程语言实现,把自己当成从来没学过编程的人,用正常人的思维去思考问题 ...

学习了学习了~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2