猴子吃包子、分糖果、算法提高 拿糖果、算法提高 分苹果:区间累加,差分数组、算法提高 P0402:从后面往前面推桃子、陶陶摘苹果、陶陶摘苹果:if else

猴子吃包子

题目

问题描述

  从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同;肉包每秒钟吃x个;韭菜包每秒钟吃y个;没有馅的包子每秒钟吃z个;现在有x1个肉包,y1个韭菜包,z1个没有馅的包子;问:猴子吃完这些包子要多久?结果保留p位小数。

输入格式

  输入1行,包含7个整数,分别表示吃不同包子的速度和不同包子的个数和保留的位数。

输出格式

  输出一行,包含1个实数,表示吃完所有包子的时间。

样例输入

4 3 2 20 30 15 2

样例输出

22.50

数据规模和约定

  0<x<100;0<y<100;0<z<100;0<x1<=1000000;0<y1<=10000000;0<z1<=10000000;0<p<=1000

代码

package 摘东西;

import java.util.Scanner;

public class 猴子吃包子 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int xrou=sc.nextInt();
		int xjiu=sc.nextInt();
		int x=sc.nextInt();
		int grou=sc.nextInt();
		int gjiu=sc.nextInt();
		int gx=sc.nextInt();
		int p=sc.nextInt();
		
		double sum=0;
		sum=1.0*grou/xrou+1.0*gjiu/xjiu+1.0*gx/x;
		System.out.printf("%."+p+"f",sum);//输出控制n位小数位
	}

}

分糖果

题目

问题描述

  有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
 
  每个小朋友都把自己的糖果分一半给左手边的孩子。
 
  一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
 
  反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
 
  你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

输入格式

  程序首先读入一个整数N(2<N<100),表示小朋友的人数。
   接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)

输出格式

  要求程序输出一个整数,表示老师需要补发的糖果数。

样例输入

3
 2 2 4

样例输出

4

算法提高 拿糖果

题目

问题描述

  妈妈给小B买了N块糖!但是她不允许小B直接吃掉。
   假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
   现在小B希望知道最多可以拿多少糖。

输入格式

  一个整数N

输出格式

  最多可以拿多少糖

样例输入

15

样例输出

6

数据规模和约定

  N <= 100000

质因数:一般地说,一个数的因数是质数,就叫做这个数的质因数.
例如:18=2×3×3
这里的2、3、3都是18的因数,而2和3本身又都是质数,于是我们就把2、3、3叫做18的质因数.这里需要注意的是:18也可以写成3与6的乘积,即:18=3×6,无疑3和6都是18的因数,但3本身是质数,可以称做18的质因数,而6是合数,则不能称做18的质因数.

在这里插入图片描述

package 摘东西;

import java.util.ArrayList;
import java.util.Scanner;

public class 拿糖果 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		
		//动态转换方程的实现
		int[] dp=new int[100001];//dp【i】为可以拿取的最大糖果数
		//ArrayList<Integer> list=getPrime(100001);
		
		for( int i=0; i<=n;i++ ){
			ArrayList<Integer> vec = getPrime( i );
			int len = vec.size();
			for( int j=0; j<len; j++ ){
				dp[i] = Math.max( dp[i], dp[i-2*vec.get(j)]+vec.get(j) );
			}
		} 
		System.out.println(dp[n]);
	}
	//获得n平方根以内的所有质因数
	public static ArrayList<Integer> getPrime(int n){
		ArrayList<Integer> list=new ArrayList<Integer>();
		for(int i=2;i*i<=n;i++){
			if(n%i==0)
				list.add(i);
		}
		return list;
	}

}

算法提高 分苹果

题目

问题描述

  小朋友排成一排,老师给他们分苹果。
   小朋友从左到右标号1..N。有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果。
   最后老师想知道每个小朋友有多少苹果。

输入格式

  第一行两个整数N、M,表示小朋友个数和老师个数。
   接下来M行,每行三个整数Li、Ri、Ci,意义如题目表述。

输出格式

  一行N个数,第i个数表示第i个小朋友手上的水果。

样例输入

5 3
 1 2 1
 2 3 2
 2 5 3

样例输出

1 6 5 3 3

数据规模和约定

  40%的数据,N、M≤1 000。
   100%的数据,N、M≤100 0001≤Li≤Ri≤N,0≤Ci≤100

双重循环

package 摘东西;

import java.util.Scanner;

public class 分苹果 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int[] a=new int[n+1];
		int cnt=0;
		int lb,ub,c;
		for(cnt=0;cnt<m;cnt++){
			lb=sc.nextInt();
			ub=sc.nextInt();
			c=sc.nextInt();
			for(int i=lb-1;i<=ub-1;i++)
				a[i]+=c;
		}
		for(int i=0;i<n;i++){
			if(i==n-1)
				System.out.println(a[i]);
			else
				System.out.print(a[i]+" ");
		}
	}

}

在这里插入图片描述

在这里插入图片描述

package 摘东西;

import java.util.Scanner;

public class 分苹果1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int[] d=new int[n+5];//d[i]表示第i个小朋友比第i-1个小朋友多的苹果
		int lb,ub,c;
		while(m--!=0){
			lb=sc.nextInt();
			ub=sc.nextInt();
			c=sc.nextInt();
			d[lb]+=c;//每一次发苹果第lb个小朋友比第lb-1个小朋友多c个
			d[ub+1]-=c;//第r+1个小朋友比第r个小朋友少c个
		}
		for(int i=1;i<=n;i++){
			d[i]+=d[i-1];//根据差分数组的性质进行求和
			System.out.print(d[i]+" ");
		}
		
	}

}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

P0402

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想在吃时就只剩下一个桃子了。求第一天共摘了多少桃子。
   (下面的不是正确答案)
 输出:
   8
package 摘东西;

import java.util.Scanner;

public class P0402 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		f(10,1);
	}
	public static void f(int day,int sum){
		if(day==1){
			System.out.println(sum);
			return;
		}
		day--;
		sum=(sum+1)*2;
		f(day,sum);
	}

}

陶陶摘苹果

问题描述

  陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
   现在已知n个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入格式

  输入包括两行数据。第一行只包括两个正整数n(5<=n<=200)m(100<=m<=150),表示苹果数目和桃桃伸手可达到的高度(以厘米为单位)。第二行包含n个100200之间(包括100200)的整数(以厘米为单位)分别表示苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

输出格式

  输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

样例输入

10 110
 

100 200 150 140 129 134 167 198 200 111

样例输出

5
package 摘东西;

import java.util.Scanner;

public class 陶陶摘苹果 {

	public static void main(String[] args){
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++){
			a[i]=sc.nextInt();
		}
		int h=m+30;
		int ans=0;
		for(int i=0;i<n;i++){
			if(h>=a[i]){
				ans++;
			}
		}
		System.out.println(ans);
	}

}

陶陶摘苹果2

问题描述

  陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
   现在已知n个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度。假设她碰到苹果,苹果就会掉下来。请帮陶陶算一下,经过她的洗劫后,苹果树上还有几个苹果。

输入格式

  输入包括两行数据。第一行只包括两个正整数n(5<=n<=200)m(60<=m<=200),表示苹果数目和桃桃伸手可达到的高度(以厘米为单位)。第二行包含n个100200之间(包括100200)的整数(以厘米为单位)分别表示苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

输出格式

  输出包括一行,这一行只包含一个整数,表示陶陶不能够摘到的苹果的数目。

样例输入

10 110
 100 200 150 140 129 134 167 198 200 111

样例输出

5
package 摘东西;

import java.util.Scanner;

public class 陶陶摘苹果 {

	public static void main(String[] args){
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++){
			a[i]=sc.nextInt();
		}
		int h=m+30;
		int ans=0;
		for(int i=0;i<n;i++){
			if(h<a[i]){
				ans++;
			}
		}
		System.out.println(ans);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上Claire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值