java学习日记第三天之简单算法问题

hello 大家好

今天学习了一些有关java算法:

1.算法:解决问题的基本步骤,和实现方案

业务处理中的算法问题:

分析问题找规律

针对规律写代码

2.九九乘法口诀表

问题分析 : 1*1=1

      1*2=2 2*2=2

      1*3=3 2*3=6 3*3=9

我们发现规律 第几行有几个乘法式,需要两个遍历,从1-9行遍历,然后1-9列遍历

public class ReturnTest {

	public static void main(String[] args)
	{
		ReturnTest.ceshi();
	}
	public static void ceshi()
	{

		for(int i=1;i<=9;i++)
			{
			for(int j=1;j<=i;j++)
				{
				System.out.print(i+"x"+j+"="+i*j);
				System.out.print("\t");
				}
			System.out.println();
			}

	}

}

  我们调用我们的方法,查看结果

这样我们的九九乘法口诀表就打印出来了。

涉及的知识点,字符转义序列\t 水平制表符的使用。

两层循环的嵌套使用。

我们来看第二个问题:

中国有句俗语叫"三天打鱼两天晒网".现在请计算 A.若2010.1.16开始打渔, 问:2010年12月1日,该人打鱼还是晒网?

我们分析一下这个问题,起始时间和截止时间我们知道。这样总天数就知道,而三天打渔两天晒网,我们可以知道五天一个周期,这样我们用总天数来对5取余,得到0,1,2,3,4四种结果,而123则打渔,04晒网

这样我们还一个问题就是年分平年和闰年,会有一天的差别。这样我们先判别年是闰年还是平年,在总天数加上1天,或者按平年算。

public class ReturnTest {

	public static void main(String[] args)
	{
		ReturnTest
		//.ceshi();
		.dayu();
	}
	public static void dayu()
	{
		int sum;//总天数
		int y=2010;
		if(y%400==0||(y%4==0&&y%100!=0))
		{
			sum=365-15-30+1;
		}
		else
			sum=365-15-30+1;
		String msg=((sum/5)>=1&&(sum/5)<=3)?"打渔":"晒网";
		System.out.println("该员工在这天 "+ msg);
	}
}

  这里边涉及到:闰年的检测方法,

  Java中唯一的三元表达式 (表达式1)?表达式2:表达式3; 相当于if(表达式一)真的话选择表达式2,假的话选择表达式3;

我们来看一下这个题的变形

假设该人员从2000年1月1日开始从事打鱼工作,那么今天应该打鱼还是晒网?

public class Test1 {

	static int[] msg2={31,28,31,30,31,30,31,31,30,31,30,31};
	public static void main(String[] args)
	{
		Date date=new Date(2004, 1, 1);
		System.out.println(4*365+1);
		System.out.println(Test1.way1(date));

	}
	public static String way1(Date date)
	{

		int count1=0,count2=0;//count1:闰年的数量,count2:整年数
		int day=0;//除去整年剩下的天数
		for(int i=2001;i<=date.getYear();i++)
		{
			count2=i-2000;
			System.out.println("年:"+count2);
			if((i%4==0 && i%100!=0)||i%400 == 0)
			{
				count1++;
				if(date.getMonth()<2||(date.getMonth()==2&&date.getDay()<29))
					count1--;
			}
		}
		for(int j=0;j<date.getMonth()-1;j++)
		{
			day=msg2[j]+day;
			System.out.println("剩下的天:"+day);
		}
		int sum;//到今天的总天数
		sum=day+date.getDay()+365*count2+count1;
		System.out.println(sum);
		String msg=(sum%5 >= 1&& sum%5 <= 3)?"打渔":"晒网";
		return msg;
	}

}
class Date
{
	private int year;
	private int month;
	private int day;
	public int getYear() {
		return year;
	}
	public void setYear(int year) {
		this.year = year;
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	public int getDay() {
		return day;
	}
	public void setDay(int day) {
		this.day = day;
	}
	public Date(int year,int month,int day)
	{
		this.year=year;
		this.month=month;
		this.day=day;
	}
	}

  这是我刚写的 ,不知道对错!嘿嘿,等明天被人家检查啦 再来公布。我感觉写的有点麻烦,自己写了一个时间类。我感觉java内部肯定有。

第三个问题

问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?

分析一下题目:

猴子最后一天的加1乘以2就是前一天的数量;这样我们就可以用一个循环来从第十天倒着回去

public class ReturnTest {

	public static void main(String[] args)
	{
		ReturnTest
		//.ceshi();
		//.dayu();
		.houzi();
	}
	public static void houzi()
	{
		int num=1;
		for(int i=9;i>0;i--)
		{
			num=(num+1)*2;
		}
		System.out.println("猴子摘得总数是 :"+num);
	}
}

  这样就得到第一天猴子摘桃的数量啦。

第四个问题:

马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭,总共花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?

我们来分析一下这个问题:

三十个人必须有男人x,女人y,小孩z,并且满足x+y+z=30;

共花了50先令,3*x+2*y+z=50;

我们可以联立两个等式,y=20-2x; z=10-x;而且我们可以判断x的数量1-9;我们就可以枚举法来获取所有的可能组合

public class ReturnTest {

	public static void main(String[] args)
	{
		ReturnTest
		//.ceshi();
		//.dayu();
		 //.houzi();
		.chifan();
	}
	public static void chifan()
	{
		int x,y,z;
		for(x=1;x<10;x++)
		{
			y=20-2*x;
			z=10-x;
			System.out.println("男人:"+x+"女人:"+y+"小孩 :"+z);
		}
	}
}

  这样我们可以获取三人的所有组合情况;

时间: 2024-12-29 07:13:48

java学习日记第三天之简单算法问题的相关文章

Java学习日记(一)基础

标识符: 由26个英文字母大小写,数字:0-9 符号:_ $ 组成 定义合法标识符规则: 1.数字不可以开头. 2.不可以使用关键字. 3.Java中严格区分大小写. Java中的注释格式: 单行注释: 格式: //注释文字 多行注释: 格式: /* 注释文字*/ 文档注释: 格式:/** 注释文字 */ 常量: 常量表示不能改变的数值. java中常量的分类: 1.整数常量.所有整数 2.小数常量.所有小数 3.布尔型常量.较为特有,只有两个数值.true 和false. 4.字符常量.将一个

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

java学习日记第一天

java 学习日记 第一天 java学习准备工作 首先环境配置:一个是jdk安装,另一个编译工具 eclipse ,安装下载教程网上很多 找了一个照着做就行 : 上述步骤完成,我们就可以打开eclipse进行我们第一个程序的编写啦当然是编写我们熟悉的helloWorld创建一个Java Perfect 目前好像基本都习惯用工程管理我们就建一个java工程然后点开工程在src右键new一个class,不用问这是啥这是啥,先把程序跑起来,慢慢就懂了我们在{}写我们的程序,这就好比helloworld

JAVA学习Swing章节流布局管理器简单学习

package com.swing; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 1:流(FlowLayout)布局管理器是布局管理器中最基本的布局管理器,流布局管理器在整个容器中 * 的布局正如其名,像流一样从左到右摆放组件,直到占据了这

Java学习总结(三)——面向对象(上)

Java学习总结(三) -面向对象(上) 一.面向对象的概念及思考方式 面向对象的理解:是一种编程思想,他将对象作为解决问题的基本元素,利用对象与对象之间的相互作用来设计程序. 2.面向对象的思考方式:(1)首先确定问题域中的对象 (2)确定对象的特征与功能 (3)了解对象与对象之间的关系 例:设计一个五子棋游戏的对象:·黑白双方对象     ·绘制棋盘     ·输赢规则 二.类与对象 1.对象:用来描述客观事物的一个实体,由一组属性和行为构成. 2.类:(1)是一个模板,他描述一类对象的行为

数据结构学习日记2:实现一个简单的线性表功能(链式存储方式)

数据结构学习日记,此次是用链表来实现一个线性表的功能 // ListTable1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; #define ERROR 0; #define OK 1; typedef int Status; typedef int ElemType; //声明一个节点 typedef struct Node { ElemType d

JAVA学习之路三 编程英文汇总学习

JAVA学习中的每个章节中都有许多英文,不断熟悉工作英语也是提高编程能力很重要的一块,对于IT行业,英语才是通用语. 记在<JAVA语言程序设计>学习的第一章英文学习之后 .class file(.class文件)                       javac command(javac命令)          .java file(.java文件)            java Development Toolkit(JDK,java开发工具包)          assembl

Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行

1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用了,但是如果部署服务的时候我们不可能只运行startup.bat文件,我们需要新建一个服务并可以通过tomcat6w.exe启动和关闭服务. 2.无法运行tomcat6w.exe (1)提示错误: 运行tomcat6w.exe ,提示 指定的服务未安装 unable to open the serv

学习日记(三) java数据类型

java是一种强类型的语言,所谓强类型,意味着每个变量都要有确定的类型,每个表达式也要有明确的类型,包括传递的某些参数.java中从大的方面分有两大数据类型,分别是基本数据类型和引用数据类型,基本数据类型是java中规定的八种,引用数据类型则是除此八种以外的所有类型,一般都是在程序中根据需要自定义的. 基本数据类型包括整形int.字节形byte.短整型short.长整型long.字符型char.浮点型float.双精度小数型double和布尔型boolean,至于这些类型所对应的单词,就是jav