题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
public class lianxi {
public static void main(String[] args) {
int i,m,j=0,k,count;
for(i=4;i<10000;i+=4)
{ count=0;
m=i;
for(k=0;k<5;k++)
{
j=i/4*5+1;
i=j;
if(j%4==0)
count++;
else break;
}
i=m;
if(count==4)
{System.out.println("原有桃子 "+j+" 个");
break;
}
}
}
}
这个程序使用了逆推法 和穷举法 从最后一只猴子开始往第一个猴子推 这个过程一共有4只猴子 推完第二只猴子 就可以知道原来有多少个桃子 i表示当前猴子所得到的桃子数,i/4 因为自己只得到了四份(有一份被上一个猴子拿掉了),求每一份是多少个。i/4*5表示上一个猴子拿之前的数量。i/4*5+1 上一个猴子得到的桃子数。 转成数学角度来看待问题
设第五只猴子拿走n个
第五只猴子分之前有:5n+1(个)
第四只猴子分之前有:(5n+1)×5/4+1
=25/4n+9/4(个)
第三只猴子分之前有:(25/4n+9/4)×5/4+1
=125/16n+61/16(个)
第二只猴子分之前有:(125/16n+61/16)×5/4+1
=625/64n+369/64(个)
第一只猴子分之前有【原来】:(625/64n+369/64)×5/4+1
=3125/256n+2101/256(个)
3125/256=12又53/256
2101/256=8又53/256
53n+53是256的倍数,n最小为255
n=255时,3125/256n+2101/256=3121(个)
答:海滩上原来最少有3121个桃子
题目:809*??=800*??+9*?? 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
public class lianxi {
public static void main(String[] args) {
for(int i=10;i<=19;i++){
if((8*i)>=10&&(8*i)<100)
if((9*i)>=100&&(9*i)<1000)
if(809*i==(800*i)+(9*i))
System.out.println("809*"+i+"=800*"+i+"+9*"+i);
}
}
}
穷举法 条件相符答案就出来
题目:求0—7所能组成的奇数个数。
//组成1位数是4个。 C(4,1) 个位数
//组成2位数是7*4个。C(7,1)*C(4,1) 十位数 个位数
//组成3位数是7*8*4个 C(7,1)*C(8,1)*C(4,1) 百位数 十位数 个位数
//组成4位数是7*8*8*4个。C(7,1)*C(8,1)*C(8,1)*C(4,1)千位数 百位数 十位数 个位数 可以选择的数
//......
排列组合问题 从第三位数开始 只需要在C(7,1)和(4,1)之间插入 C(8,1)即可 由上规律就可以得到答案
public class lianxi {
public static void main(String[] args) {
int s=4,sum=0;
System.out.println("1位数的奇数有"+s+"个");
sum=s*7;
System.out.println("2位数的奇数有"+sum+"个");
for(int i=3;i<=7;i++){
sum*=8;
System.out.println(i+"位数的奇数有"+sum+"个");
}
}
}
题目:一个偶数总能表示为两个素数之和。
//由于用除sqrt(n)的方法求出的素数不包括2和3,
//因此在判断是否是素数程序中人为添加了一个3。
import java.util.*;
public class lianxi {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("输入一个偶数");
int n;
do{
System.out.print("请输入一个大于等于6的偶数:");
n= input.nextInt();
} while(n<6||n%2!=0); //判断输入是否是>=6偶数,不是,重新输入
for(int i=3;i<=n/2;i+=2){
if(fun(i)&&fun(n-i)) {
System.out.println(n+" = "+i+" + "+(n-i));
} //输出所有可能的素数对
}
}
static boolean fun (int a){ //判断是否是素数的函数
boolean flag=false;
if(a==3){
flag=true;return(flag);
}
for(int i=2;i<=Math.sqrt(a);i++){
if(a%i==0) {
flag=false;break;
}
else
flag=true;
}
return (flag) ;
}
}
题目:判断一个整数能被几个9整除
import java.util.*;
public class lianxi {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = s.nextInt();
int tmp = num;
int count = 0;
for(int i = 0 ; tmp%9 == 0 ;){
tmp = tmp/9;
count ++;
}
System.out.println(num+" 能够被 "+count+" 个9整除。");
}
}