2021-10-26

这个博客包含了一系列的编程实现,包括经典的数学问题如百钱买百鸡、卖西瓜、猴子吃桃、鸡兔同笼以及兔子繁殖问题,还有素数搜索算法。这些问题展示了如何使用Java解决涉及算术和逻辑的算法挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大数据习题1

1.百钱买百鸡

/**
 * 百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,问公,母,小鸡各买多少只
 * 提示: a+b+c=100  只
 * 5a+3b+1/3c=100钱
 *
 * 公鸡:0只,母鸡25只,小鸡75只
 * 公鸡:4只,母鸡18只,小鸡78只
 * 公鸡:8只,母鸡11只,小鸡81只
 * 公鸡:12只,母鸡4只,小鸡84只
 *
 */

public class one {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++)  //公鸡数目 5元一只
        {
            for (int j = 0; j < 100; j++)  //母鸡数目 3元一只
            {
                int k = 100 - i - j;    //小鸡数目 1元三只
                if (k % 3 == 0 && i * 5 + j * 3 + k / 3 == 100)    //小鸡需三只一组购入,总和需等于100
                {
                    System.out.println("公鸡:" + i + "只,母鸡" + j + "只,小鸡" + k + "只");
                }
            }
        }
    }
}

2.卖西瓜


/**
 * 有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
 *
 * num = num / 2 - 2 ;
 *
 * 总共花费:8天
 */

public class twe {
    public static void main(String[] args) {
        int num = 1020; //1020个西瓜
        int time = 0;    //计算时间
        while (num > 0) {
            /* System.out.println(num); */ //打印过程
            time++; // 时间累计
            num = num / 2; //卖掉一半
            num -= 2; //多卖两个;
        }
        System.out.println("总共花费:" + time + "天");
    }
}

3.猴子吃桃


/**
 * 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,
 * 以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
 *
 * num = (num+1) * 2 ;
 *
 * 第一天摘了1534个桃
 */
public class three {
    public static void main(String[] args) {
        int num = 1; //桃总数
        for (int i = 0; i < 9; i++) {
            /* System.out.println(num);*/ //打印数据
            num = (num + 1) * 2; //加回多吃的一个是原来的一半
        }
        System.out.println("第一天摘了" + num + "个桃");
    }
}

4.鸡兔同笼

/**
 * 鸡兔同笼。鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?要求鸡兔至少一样一只
 *
 * 兔子有30只,鸡有20只
 */

public class four {
    public static void main(String[] args) {
        // 方法一
        for (int i = 1; i < 50; i++) //兔子数量 4支脚
        {
            int k = 50 - i;   //鸡数量 2支脚
            if (i * 4 + k * 2 == 160) {
                System.out.println("兔子有" + i + "只,鸡有" + k + "只");
            }
        }

        //方法二;
        int num = 50;
        int foodNum = 160;
        int i = (foodNum - num * 2) / 2;
        int k = 50 - i;
        System.out.println("兔子有" + i + "只,鸡有" + k + "只");
    }

}

5.兔子繁殖(斐波那契)

/**
 * 有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?  分析:兔子的规律为数列,1,1,2,3,5,8,13,21
 *
 * 能繁殖233对
 *
 */

public class five {
    public static void main(String[] args) {
        int num1 = 1;     //现有量
        int num2 = 0;     //增长量
        for (int i = 1; i <= 12; i++) {
            num1 = num1 + num2; //num1 = 现有量 + 增长量 ;
            num2 = num1 - num2; //num1 = 原现有量 + 增长量 - 增长量 ;
            /* System.out.println(num1); */ //打印数据
        }
        System.out.println("能繁殖" + num1 + "对");
    }

}

6.求素数

/**
 * 求300-400之间的素数
 *
 * 307为素数
 * 311为素数
 * 313为素数
 * 317为素数
 * 331为素数
 * 337为素数
 * 347为素数
 * 349为素数
 * 353为素数
 * 359为素数
 * 367为素数
 * 373为素数
 * 379为素数
 * 383为素数
 * 389为素数
 * 397为素数
 *
 */

public class six {
    public static void main(String[] args) {
        //方法一 暴力
        {
            boolean flag;
            for (int i = 300; i <= 400; i++) {
                flag = true;
                for (int f = 2; f * f <= i; f++) {
                    if (i % f == 0)
                        flag = false;
                }
                if (flag) {
                    System.out.println(i + "为素数");
                }
            }
        }
        System.out.println("---------------------------------------------------------------------------------------------------");
        //方法二       已知大于5素数分布在6的倍数周围;
        {
            boolean flag;
            for (int i = 300; i <= 400; i += 6) {
                flag = true;
                for (int f = 2; f * 2 <= i - 1; f++) {
                    if ((i - 1) % f == 0)
                        flag = false;
                }
                if (flag) {
                    System.out.println(i - 1 + "为素数");
                }
                flag = true;
                for (int f = 2; f * 2 <= i + 1; f++) {
                    if ((i + 1) % f == 0)
                        flag = false;
                }
                if (flag) {
                    System.out.println(i + 1 + "为素数");
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值