十道简单算法题 (2)

十道简单算法题

六、猴子吃桃子问题

猴子摘下了n个桃子,当天吃掉一半多一个,第二天也是吃掉剩下桃子的一半多一个,到了第十天,桃子只剩下了1个。问:猴子第一天摘了多少个桃子

思路:

假设当天有n个桃子,它是前一天桃子的一半少1个,f(n - 1) = f(n)/2 - 1,

我们就可以推出当天桃子的个数:根据递推公式:f(n) = 2 * f(n - 1) + 2

用递归和循环都可解决:

递归方式:

/** * 猴子吃桃问题 * @param x 天数 */ public static int monkeyQue(int x) { if (x <= 0) { return 0; } else if (x == 1) { return 1; } else { return 2 * monkeyQue(x - 1) + 2; } }

循环方式:

int x = 1; for (int i = 1; i <= 9; i++) { x = (x + 1) * 2; }

结果:

十道简单算法题

七、计算单词的个数

输入一段字符,计算出里面单词的个数,单词之间用空格隔开 ,一个空格隔开,就代表着一个单词了

思路:

把字符遍历一遍,累计由空格串转换为非空格串的次数,次数就是单词的个数

定义一个标志性变量flag,0表示的是空格状态,1表示的是非空格状态

/** * 输入一段字符,计算出里面单词的个数 * * @param str 一段文字 */ public static int countWord(String str) { // 0 表示空格状态,1 表示非空格状态 int flag = 0; // 单词次数 int num = 0; for (int i = 0; i < str.length(); i++) { if (String.valueOf(str.charAt(i)).equals(" ") ) { flag = 0; } else if (flag == 0) { num++; flag = 1; } } return num ; }

结果:

十道简单算法题

八、判断字母是否完全一样

给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样(顺序可以不一样)

思路:

遍历这两个字符串,用每个字符减去\'a\',将其分别存入到数组中去,随后看这两个数组是否相等即可

要点:

\'c\'-\'a\'=2即可计算出存储的位置,如果有多个,则+1即可,后面我们来比较数组大小

代码实现:

/** * 给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样(顺序可以不一样) */ public static void isAnagram() { //分别存储字符串的字符 char[] array1 = new char[26]; char[] array2 = new char[26]; String s1 = "pleasefollowthewechatpublicnumber"; String s2 = "pleowcnumberthewechatpubliasefoll"; for (int i = 0; i < s1.length(); i++) { char value = s1.charAt(i); // 算出要存储的位置 int index = value - \'a\'; array1[index]++; } for (int i = 0; i < s2.length(); i++) { char value = s2.charAt(i); // 算出要存储的位置 int index = value - \'a\'; array2[index]++; } for (int i = 0; i < 26; i++) { if (array1[i] != array2[i]) { System.out.println("不相同"); return; } } System.out.println("相同"); }

结果:

十道简单算法题

九、判断一个数是不是2的某次方

判断一个数是不是2的某次方

思路:

除2取余数,直至余数不为0【针对2的倍数这种情况】,看是不是等于1就可以判断是不是2的某次方了

/** * 判断是否是2的某次方 */ public static void isPowerOfTwo() { int num = 3; if (num == 0) { System.out.println("不是"); } while (num % 2 == 0) { num = num / 2; } if (num == 1) { System.out.println("是"); } else { System.out.println("不是"); } }

结果:

十道简单算法题

这题还有另一种解决方式,就是位运算:

2的n次方都有一个特点,二进制都是1000000

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdgjd.html