码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-08-07 20:29:30      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:简单算法   第一天   解决   检查   一个   java   找规律   gety   多少   

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);
		}
	}
}

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

 

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

标签:简单算法   第一天   解决   检查   一个   java   找规律   gety   多少   

原文地址:http://www.cnblogs.com/doucunkai/p/7300898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!