1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
public class Duck {
public static int duck(int sum,int village){
if(village == 0){
return sum;
}else{
return duck((sum+1)*2, village-1);
}
}
public static void main(String[] args) {
int d = duck(2,7);
System.out.println("总共有"+d+"只鸭子");
for(int i = 1;i<8;i++){
System.out.println("第"+i+"个村子卖了"+(d/2+1)+"只鸭子");
d = d/2-1;
}
}
}
2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
如:输入22,
输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=16
import java.util.Scanner;
public class Jiaogudingli {
static int step = 0;
public static int number(int a){
step++;
if(a == 1){
return step;
}else{
if(a%2 == 0){
a = a/2;
}else{
a = 3*a + 1;
}
return number(a);
}
}
public static void main(String[] args) {
System.out.println("请输入一个自然数:");
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int a = number(sc.nextInt());
System.out.println("step = "+a);
step = 0;
}
}
}
3.电话号码对应的字符组合:在电话或者手机上,一个数字如2对应着字母ABC,7对应着PQRS。那么数字串27所对应的字符的可能组合就有3*4=12种(如AP,BR等)。现在输入一个3到11位长的电话号码,请打印出这个电话号码所对应的字符的所有可能组合和组合数。
import java.util.Scanner;
public class Phone {
static String[][] s2 = { //按照键盘初始化数组
{""},
{""},
{"a","b","c"},
{"d","e","f"},
{"g","h","i"},
{"j","k","l"},
{"m","n","o"},
{"p","q","r","s"},
{"t","u","v"},
{"w","x","y","z"}};
public static void main(String[] args) {
int sum = 1;
System.out.println("请输入3到11位长的电话号码:");
Scanner sc = new Scanner(System.in);
String k = sc.next().toString();
String[] s1 = k.split(""); //将输入的一串数字分离,并赋给数组s1保存
int len = s1.length;
for(int i=0;i<len;i++){ //统计组合数
sum *= s2[Integer.valueOf(s1[i])].length;
}
System.out.println("组合数sum = "+sum);
System.out.println("可能的组合为:");
}
}
4.日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完 后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?
#include<stdio.h>
#include<stdlib.h>
int main()
int sum = 2520;
int avge = 2520/6;
int a[6] = {0} ;
int b =1;
int momey= 0;
for( int i = 1 ; b && (i < sum) ; i++)
{
a[0] = i;
if((a[0]%8)!=0)
{
continue;
}
for( int j = 1; j <= 5 ; j++)
{
a[j] = avge*((8-j)/(8-j-1))+a[j-1]/(8-(j-1));
if( j == 5)
{
momey = (a[0]*7)/8+a[j]/3;
if(momey == avge)
{
b = 0;
}
}
}
}
printf("%d,%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4],a[5]);
system("pause");
return 0;
}