A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 泡沫__opt 中级黑马   /  2014-10-20 09:54  /  2639 人查看  /  13 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

     用左手手指数数,从1数到n。她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5。接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,如此反复。问最后会停在那个手指上?用编号1、2、3、4、5依次表示大拇指、食指、中指、无名指、小指。
比如:输入样例: 10
          输出样例:2食指

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

13 个回复

倒序浏览
是不是做循环,每次循环加一个变量,如果是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;
回复 使用道具 举报 1 0
ll_shitou 发表于 2014-10-20 10:14
是不是做循环,每次循环加一个变量,如果是5,变量改为-1,如果是1,变量改为1,做循环n次就可以了 ,应该 ...

嗯~~没有问题啊~~但是你的i初始值应该是1吧?
回复 使用道具 举报
哪个初始值啊  手指还是移动还是i,i是1的话就得<=n,这个没什么区别 坐nc
回复 使用道具 举报
本帖最后由 十万一千 于 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. }
复制代码


回复 使用道具 举报
没明白为啥要用integer,应该是不对的吧 ,最后inputNumber 这个值为1,应该为0才对吧 ,自己看下吧  
回复 使用道具 举报
ll_shitou 发表于 2014-10-20 12:23
没明白为啥要用integer,应该是不对的吧 ,最后inputNumber 这个值为1,应该为0才对吧 ,自己看下吧   ...

System.out.println(count + fingers[count - 1]); 输入1的话,自动打印了0下标了,
其实用int一样了,我习惯用包装类型了
回复 使用道具 举报
恩   ,不过 应该是没必要,你循环的次数不对我说的是,你只循环了9次吧
回复 使用道具 举报
  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 15:47
能告我你是怎么做到的么?
我就没有思路啊……
想了好半天才做出来…… ...

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


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

finger.jpg
回复 使用道具 举报
java_dream 发表于 2014-10-22 13:13
看到这类题目,先不要想着如何用编程语言实现,把自己当成从来没学过编程的人,用正常人的思维去思考问题 ...

学习了学习了~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马