1.洗碗问题
有一位妇女在河边洗碗,过路人问她为什么洗这么多碗?她说:家里来了很多客人,他们每两个人合用一个饭碗,每三个人合用一个汤碗,每四个人合用一个菜碗,共用了65个碗。你能从她家的用碗情况,算出她家来了多少客人吗?
解法一:暴力拆解
/** 我认为此题与鸡兔同笼问题有相同的思路,设x个饭碗,y个汤碗,z个菜碗
则得到第一个关系式x+y+z=65
设客人来了n个,根据用碗情况
则得到第二组关系式:x=n/2,y=n/3,z=n/4此三个条件同时满足
xyz有范围,我在循环中进行遍历,直到满足条件为止
*/
public class Test6
{
public static void main(String[]args)
{
int x; // 饭碗
int y; // 汤碗
int z; // 菜碗
for( x=0;x<=65;x++)
{
for( y=0;y<=65;y++)
{
for( z=0;z<=65;z++)
{
if((x+y+z==65)&&(2*x==3*y)&&(2*x==4*z))
{
System.out.println("她家来的客人数为"+2*x);
}
}
}
}
}
}
解法二:while循环
public class XiWan{
/*
* 洗碗问题
*/
public static void main(String[] args){
int guestnum=12;
while(guestnum/2+guestnum/4+guestnum/3!=65)
guestnum+=12;
System.out.println("她家来的客人数为"+guestnum);
}
}
2.求区间内的素数
求100至200间的全部素数。
数与数之间用一个空格分开。
解法一:只定义一个方法解决
public class Test7
{
public static void main(String[] args)
{
for(int i=100;i<=200;i++)
{
boolean flag=true;
for(int j=2;j<i;j++)
{
if(i%j==0)
{
flag=false;
break;
}
}
if(flag)
{
System.out.print(i+" ");
}
}
}
}
解法二:求素数写成一个单独方法,定义两个方法求解
public class PrimeNumber{
public static void main(String[] args){
for(int i=100;i<=200;i++){
if (prime(i))
System.out.print(i+" ");
}
}
public static boolean prime(int i) {
for(int j=2;j<i/2;j++){
if(i%j==0){
return false;
}
}
return true;
}
}
3.求斐波那契数列
求Fibonacci数列的前40个数。
数与数之间用一个空格分开。
解法一:一法求解
public class Test8
{
public static void main(String[]args)
{
int []a=new int [40];
a[0]=1;
a[1]=1;
System.out.print(a[0]+" "+a[1]+" ");
for(int i=2;i<=39;i++)
{
a[i]=a[i-1]+a[i-2];
System.out.print(a[i]+" ");
}
}
}
解法二:双法求解
public class Fibonacci {
/**求Fibonacci数列的前40个数。*/
public static void main(String[] args) {
for (int i=1;i<=40;i++) {
System.out.print(fibo(i)+" ");
}
}
private static int fibo(int n) {
if (n==1) return 1;
if (n==2) return 1;
return fibo(n-1)+fibo(n-2);
}
}