虽然刚学JAVA,但已经开始感到数学功底的不足了。本来JAVA 就已经很不容易学了,还得把数学学好,
真的很让人头痛啊,想写个程序却找不出个好的算法,真的很让人郁闷那。
常胜将军:
现有
21
根火柴,两人轮流取,每人每次可以取走
1
至
4
根,不可多取,也不能不取,谁取最后一楰火柴谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”;
学过C语言的应该知道这道题吧,其中的算法是很简单的,只要电脑取的数等于5-x(x为人取走的数),就能够取得常胜,可是当我自己想的时候却完全走偏了路,感觉自己挺笨的。下面是用JAVA实现的常胜将军的代码:
import java.util.*;
public class 常胜将军 {
int x; //人选取的数
int a=21;
int y; //电脑选取的数
public void test()
{
while(a>0)
{
if(a==1)break;
try
{
Scanner in = new Scanner(System.in);
x=in.nextInt();
if(x<1||x>4)throw new InputMismatchException(); //人输入是否正确,错则抛出异常
a=a-x;
System.out.println("你输入了"+x+"/n还剩"+a);
y=5-x; //算法核心
a=a-y;
System.out.println("电脑选取了"+y+"/n还剩"+a);
//if(a==1)break;
}catch(InputMismatchException e)
{
System.out.println("异常,输入有误,重输");
test();
}
}
}
public static void main(String[]args)
{
System.out.println("人先取");
new 常胜将军().test();
System.out.println("你输了!!!");
}
}
public class 常胜将军 {
int x; //人选取的数
int a=21;
int y; //电脑选取的数
public void test()
{
while(a>0)
{
if(a==1)break;
try
{
Scanner in = new Scanner(System.in);
x=in.nextInt();
if(x<1||x>4)throw new InputMismatchException(); //人输入是否正确,错则抛出异常
a=a-x;
System.out.println("你输入了"+x+"/n还剩"+a);
y=5-x; //算法核心
a=a-y;
System.out.println("电脑选取了"+y+"/n还剩"+a);
//if(a==1)break;
}catch(InputMismatchException e)
{
System.out.println("异常,输入有误,重输");
test();
}
}
}
public static void main(String[]args)
{
System.out.println("人先取");
new 常胜将军().test();
System.out.println("你输了!!!");
}
}
的确是很简单的算法。
下面还有一些小题目,有兴趣的尝试一下吧:
。。。。。。。。。。。。。。。。。。。。。。。。。
1:这是中国民间的一个游戏。两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。
2:
在图中的九个点上,空出中间的点,其余的点上任意填入数字1到8;1的位置固定不动,然后移动其余的数字,使1到8顺时针从小到大排列.移动的规律是:只能将数字沿线移向空白的点.
请编程显示数字移动过程。
3:
验证尼科彻斯定理,即:任何一个整数的立方都可以写成一串连续奇数的和。××
4:
设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。
。。。。。。。。。。。。。。。。。。。。。。。。。。
问过一些大二的学长,听他们说,离数挺重要的,可我学的稀里糊涂的啊。
三门数学课,高数,线数,离数,学的我头大啊。
有同感的同学们都出来抱怨下吧,憋疯了!!!!
抱怨完了,一起努力吧。
学好数学吧,进书堆了,误扰。。。。。。。。