上机练习

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值