「放苹果java」放苹果的照片

博主:adminadmin 2023-01-10 11:15:06 1166

今天给各位分享放苹果java的知识,其中也会对放苹果的照片进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

m个相同苹果放到n个相同篮子里有多少种放法,允许有篮子不放 java

插板法

C(M+1)

(N-1)

比如M=4,N=3

则C5

2=10

就是说把M个苹果摆成一排,其间及两边总共(M+1)个位置

【原因是篮子可空.

若题目要求至少一个苹果,则两边不能放板,只能在其间期间插板,数目(M-1)】

任插(N-1)个板,两板之间为一个篮子,则有N个篮子

咱们只需要知道有多少种插法,就可以知道有多少种放法

即C(M+1)

(N-1)

(篮子相同,此处应该不排序)

看怎样,

用Java代码模拟实现:一个人不断往箱子里放苹果,另一个人不断从箱子里取苹果,箱子里只能放5个苹

package com.zt.test;

import java.util.Stack;

public class Test7 {

private StackString box;

public String operationBox(boolean flag, String num) {

String str = "";

synchronized (Test7.class) {

if (flag) {

this.box.push(num);

} else {

str = this.box.pop();

}

}

return str;

}

public static void main(String args[]) {

Test7 a = new Test7();

a.initApples();

}

public Test7() {

this.box = new StackString();

}

public void forSleep(int i) {

try {

Thread.sleep(i);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

 * 放苹果的人

 */

public void putApple() {

int no = 1;

while (true) {

this.forSleep(1000);

int check = this.box.size();

System.out.println("---------现在有" + check + "个苹果---------");

if (check = 5) {

System.out.println("------------箱子里有5个苹果无法放入------------");

continue;

} else {

System.out

.println("------------放入第" + no + "个苹果--------------");

this.operationBox(true, no + "");

no = no + 1;

}

}

}

/**

 * 拿苹果的人

 */

public void getApple() {

while (true) {

this.forSleep(800);

int check = this.box.size();

System.out.println("=========现在有" + check + "个苹果============");

if (check == 0) {

System.out.println("==========箱子里有0个苹果无法去除===========");

continue;

} else {

String str = this.operationBox(false, null);

System.out.println("==========从箱子出取出第" + str + "个苹果==========");

}

}

}

/*

 * 初始化两个人

 */

public void initApples() {

Thread t1 = new Thread(new Runnable() {

public void run() {

try {

putApple();

} catch (Exception e) {

}

}

});

t1.start();

Thread t2 = new Thread(new Runnable() {

public void run() {

try {

getApple();

} catch (Exception e) {

}

}

});

t2.start();

}

}

一个放一个拿,operationBox()锁住stack的操作,forsleep方法是进行休眠的,模拟一块一慢,如果需要无序时间,自己写随机函数进行线程休眠。

java算法,例子N个苹果放到20个袋子中,操作时间为4个小时,其中每个袋子的各苹果放入时间间隙大于30分钟

需要使用多线程

package org.xuyh.design;

import java.util.Scanner;

/**

 * N个苹果放到20个袋子中,操作时间为4个小时,其中每个袋子的各苹果放入时间间隙大于30分钟

 * @author XuYanhang

 *

 */

public class AppleOperation implements Runnable{

public static final int ONE_SECOND = 1000;

private final int[] packages;

public final int operationTime;

public final int minSpacetTime;

private int appleCount;

private boolean timeEnd = false;

public AppleOperation(int appleCount,int packCount,int operationTime,int minSpacetTime){

  this.appleCount = appleCount;

  packages = new int[packCount];

  this.operationTime = operationTime;

  this.minSpacetTime = minSpacetTime;

 }

public int getAppleCount(){

  return appleCount;

 }

public int getPackCount(){

  return packages.length;

 }

public int getOperationTime(){

  return operationTime;

 }

public boolean hasEnd(){

  return timeEnd || appleCount == 0;

 }

public synchronized void setTimeEnd(){

  timeEnd = true;

 }

public void run() {

  int pack = Integer.parseInt(Thread.currentThread().getName());

  while(appleCount0){

   synchronized(this){

    if(hasEnd()){

     break;

    }

    appleCount--;

    packages[pack]++;

    System.out.println("一个苹果放入了第"+(pack+1)+"个袋子中,还剩"+appleCount+"个苹果");

   }

   for(int i = 0 ; i minSpacetTime ; i++){

    synchronized(this){

     if(hasEnd()){

      break;

     }

    }

    try {

     Thread.sleep(ONE_SECOND);

    } catch (InterruptedException e) {

     e.printStackTrace();

    }

   }

  }

  synchronized(this){

   System.out.println("第"+(pack+1)+"个袋子最终有"+packages[pack]+"个苹果");

  }

 }

//Test main method

 public static void main(String[] args) {

  Scanner scanner = new Scanner(System.in);

  

  int appleCount = -1;

  do{

   System.out.print("N个苹果放到20个袋子中,操作时间为4个小时,其中每个袋子的各苹果放入时间间隙大于30分钟。\n"

     + "输入苹果总数N:");

   String string = scanner.next();

   if(null != string string.matches("^\\d{1,8}$")){

    appleCount = Integer.parseInt(string);

   }

  }while(appleCount == -1);

  

  scanner.close();

AppleOperation operation = new AppleOperation(appleCount,20,4*60*60,30*60);

new WaitThread(operation).start();

for (int i = 0; i operation.getPackCount(); i++) {

   

   Thread thread = new Thread(operation,""+i);

   

   thread.start();

   

  }

  

 }

static class WaitThread extends Thread{

private AppleOperation operation;

public WaitThread(AppleOperation operation){

   this.operation = operation;

  }

  

  public void run(){

   try {

    Thread.sleep(operation.getOperationTime()*ONE_SECOND);

   } catch (InterruptedException e) {

    e.printStackTrace();

   }

   

   operation.setTimeEnd();

System.out.println("时间到,苹果装袋操作结束,最后为装袋的苹果个数:"+operation.getAppleCount());

}

 }

}

这里我们额外启动了21个线程,其中一个是计4小时的定时的,其他20个是向每个袋子中放苹果的线程。

关于放苹果java和放苹果的照片的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。