大数据习题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 + "为素数");
}
}
}
}
}