`
jar2009
  • 浏览: 4740 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《字符反转,猴子摘桃》程序设计

    博客分类:
  • Java
阅读更多

 

在给应届生审题时,有如下两题,经常难倒各位同学,尤其是第一题,所以在下将个人的理解分享出来,希望大家顺利通过笔试。当然同学们得去理解代码,而不是死记。^.^


package com.jarjar.services;

/**
 * 
 * @author Jiayb
 *
 */
public class Test {
	public static void main(String[] args) {
		getPeach(10);
		System.out.println("递归方式:总数="+getPeachs(10));
		reverseString("abcdefgh");
	}
	
	/**
	 * 题一:
	 * 写一个函数reverseStrings(String  temp),
	 * 实现逆转一个字符串的功能(比如输入字符串为:abcdef,则输出为:fedcba)。
	 */
	
	public static void reverseString(String str){
		//方式一,利用StringBuffer
		StringBuffer sb = new StringBuffer(str);
		sb.reverse();
		System.out.println("StringBuffer方式: "+sb.toString());
		//方式二,数组
		String revStr = "";
		for (int i = str.length(); i >= 1; i--) {
			revStr = revStr+str.substring(i-1, i);
		}
		System.out.println(revStr);
	}
	
	
	/**
	 * 题二:	
	 * 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
	 * 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
	 * 以后每天早上都吃了前一天剩下的一半零一个。
	 * 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少? 
	 */
	
	/**
	 * 根据天数计算第一天总共摘了多少桃子
	 * 递归
	 * 
	 * @param numOfDays 总天数
	 * @return 第一天总共摘的桃子数
	 */
	public static int getPeachs(int days) {
		if (days < 1) {
			throw new RuntimeException("The days must more than zero!");
		}
		if (days == 1) {
			return 1;
		}
		return (getPeachs(days - 1) + 1) * 2;
	}

	/**
	 * 根据天数计算第一天总共摘了多少桃子
	 * 
	 * @param numOfDays
	 *            总天数
	 * @return 第一天总共摘的桃子数
	 */
	public static void getPeach(int days) {
		// 方法一,逆向求值
		int peachs = 1; // 最后一天剩下的桃子
		for (int i = days - 1; i >= 1; i--) {// 从总天数的前一天开始,递加到第一天跳出循环
			/*
			 * 下面程序的由来分析: 假如知道总数走正向的话,猴子吃掉的都是前一天剩下的一半桃子然后又多吃一个,即:明天的桃子数 =
			 * (今天剩余数/2-1)个, 那么算法是--第一天吃掉(peachs/2-1)个,第二天是是(peachs/2-1)/2-1...
			 * 现在我们知道最后一天剩下的个数,求总数,那么上面的公式反过来,即得到:前一天的桃子数 = (当天剩余数+1)*2
			 */
			peachs = 2 * (peachs + 1);
		}
		System.out.println("方式一:总桃子数量" + peachs + "个!");

		// 方法二,累加匹对
		int peachNum = 0; // 桃子个数
		int temp = 0; // 用来匹对的变量
		while (true) {
			peachNum++;
			temp = peachNum; // 将累加的桃子赋值给临时变量,进行运算
			// 累加到第十天
			for (int i = 1; i < days; i++) {
				temp = temp / 2 - 1;
			}
			if (temp == 1) { // 吃了十天后若按题意剩下一个即满足题意,跳出循环
				break;
			}
		}
		System.out.println("方式二:总桃子数量" + peachNum + "个!");
	}
}

 

控制台输出:
方式一:总桃子数量1534个!
方式二:总桃子数量1534个!
递归方式:总数=1534
StringBuffer方式: hgfedcba
hgfedcba

 

分享到:
评论

相关推荐

    程序设计(反转、猴子).pdf

    首先创建一个`StringBuffer`对象,将其初始化为输入字符串,然后调用`reverse()`方法,最后通过`toString()`方法获取反转后的字符串并打印。 ```java StringBuffer sb = new StringBuffer(str); sb.reverse(); ...

    【C++程序设计教程(第2版)】课后习题集.doc

    C++程序设计教程(第2版)的课后习题集涵盖了C++语言的基础知识,包括基本语法、数据类型、控制结构、数组与字符串等内容。以下是这些习题涉及的知识点详解: 1. **C++基础**: - **Hello World!程序**:这是学习...

    (完整word)C语言程序设计100个经典例子.doc

    在"C语言程序设计100个经典例子"中,我们能看到一系列用于学习和练习C语言编程技能的实例。以下是一些关键知识点的详细解释: 1. **数字排列**:这涉及到数组操作和排序算法,比如冒泡排序或快速排序,用于将一组...

    (信息学奥赛辅导)程序设计试题汇编(答案).pdf

    【信息学奥赛辅导】程序设计试题汇编(答案).pdf 这份文件主要涵盖了信息学奥林匹克竞赛中的程序设计题目及其解答,旨在帮助参赛者提升编程能力,掌握基础的算法和程序设计技巧。以下是这份资料中涉及的一些核心知识...

    (完整word版)C语言程序设计100个经典例子(2).doc

    C语言是一种广泛使用的编程...以上是C语言程序设计中涵盖的一些基础和进阶概念,通过这些例子,学习者可以全面地提升C语言编程技能。每个例子都提供了一个实际问题的解决方案,有助于加深对C语言特性和编程思维的理解。

    java 经典习题.doc

    这些Java经典习题涵盖了多个基础编程概念,包括数学问题解决、算法设计、逻辑判断、循环结构、条件运算符、数组处理、字符串操作、输入输出、递归、数学计算等。以下是这些习题所涉及的知识点: 1. **斐波那契数列*...

    c语言练习题

    12. **结构体和指针**:虽然题目未提及,但在更复杂的C语言程序设计中,结构体和指针可以用于表示更复杂的数据结构。 13. **错误处理**:在实际编程中,还需要考虑输入合法性检查和错误处理,以确保程序的健壮性。 ...

    Python练习集100题.pdf

    #### 程序21:猴子吃桃问题 - **知识点**: - 逆向思维:从结果倒推原因。 - 数学推理:根据题目条件推理计算。 - **实现思路**: 1. 从第10天剩余1个桃子开始向前推算。 2. 根据每天剩余桃子的数量推算前一天的...

    python基础练习(100题)

    - 检查字符串与其反转后的字符串是否相等。 **【程序31】** - **题目描述**:根据输入的字母判断星期几。 - **解题思路**: - 使用条件语句。 - 根据输入的字母匹配星期。 **【程序32】** - **题目描述**:改变...

    C/C++笔试程序1~149

    4. **猴子吃桃问题**:通过递归或循环解决经典的数学问题,展示算法思维。 5. **比赛对手**:通过循环遍历不同的比赛组合,解决比赛配对问题。 6. **译密码**:运用循环进行简单的加密解密操作,理解字符串处理。 ...

    MATLAB习题三MATLAB习题三.doc

    2. **字符串反转**:MATLAB中可以用`flipud`函数来反转字符串或者数字序列。 3. **条件判断**:可以使用`if...else`或`switch...case`语句进行条件判断。在处理百分制成绩时,需先验证输入的合理性,然后根据分数...

    java基础练习题

    ### Java基础知识点解析 #### 1. 整数排序算法 **题目描述**: 编写程序实现对给定的4个整数从大到小的顺序排列。...**题目描述**: 猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将...

    C#编程经验技巧宝典

    76 &lt;br&gt;0111 计算字符串中子字符串出现的次数 76 &lt;br&gt;0112 获得字符串中大写字母的个数 77 &lt;br&gt;0113 获得某字符在字符串中最后出现的位置 78 &lt;br&gt;0114 如何找出字符串中某一字符的所有位置 78...

Global site tag (gtag.js) - Google Analytics