池の問題(Java版)
10628 ワード
に質問
一つの池にはたくさんの種類の魚がいて、魚は食べ物を食べて、育ててから売って、売ってから魚を買うことができます.
前提条件
コード ts小練習(池問題)をもとに自分の考えを加えます.オンライン実行:http://java.jsrun.net/
構想魚類Fishを定義し、魚(種類、年齢、販売価格、購入価格、数量、最大年齢)を継承する.
イワシ匹
草魚
フナ匹
買い入れる
15
12
10
売りに出す
35
25
20
市場類Macketを定義し、収益予測、魚販売、魚購入の3つの方法がある.予測収益:コードの実行を終了する方法として使用します. 収益予測方法の具体的な考え方:【規定月数内】 池に成熟した魚がいるかどうかを判断し、あれば売る、なければ踊る2 残高が最も安い魚を買うことができ、池に空席がある場合は、3 跳びます.予測月数がまだあれば、等魚成熟(自動判断) 魚の販売方法の具体的な考え方: 魚が最大年齢に達したかどうかを判断し、達したら売ると同時に残高と池の魚数を更新する.そうでなければ2 ジャンプ魚のみ更新年齢 魚の買い方の具体的な考え方: 残高が10元より大きく、池に位置している場合は、単価の高い魚を優先的に購入し、2跳びをします.さもないと何もしない 残高を計算して何匹かの魚を買うことができて、しかも池がこんなに多くの位置があるかどうかを判断して、あるなら全部買って、ないなら位置の残りの数で買います.残高と池の魚数を同時に更新する で魚を売買する場合は、ArrayListで魚を保存します.デフォルトでは、魚を買うときに関連する魚のインスタンスが追加され、魚を売るときにこの動的配列を遍歴し、動的配列を 操作します.
拡張可能養魚に飼料を1つ与える需要があり、飼料にも異なる価格がある.その対応の効果も違うのではないでしょうか. 魚を買うアルゴリズムはどのように最適化することができますか? コードはまだ最適化できますか?例えば、 を手動で定義するのではなく、魚の購入価格をソートします.
Java
TS
構想 readline-syncによるコンソールインタラクション arr:Array配列要素がFishクラスである配列arr を作成する
に質問コンストラクション関数で魚のインスタンスを作成する場合はnull(Java用null)は使用できません.undefined を使用します.
一つの池にはたくさんの種類の魚がいて、魚は食べ物を食べて、育ててから売って、売ってから魚を買うことができます.
前提条件
コード ts小練習(池問題)をもとに自分の考えを加えます.オンライン実行:http://java.jsrun.net/
構想
イワシ匹
草魚
フナ匹
買い入れる
15
12
10
売りに出す
35
25
20
拡張可能
Java
package test;
import java.util.ArrayList;
import java.util.List;
public class Market {
public static Integer sum=132; // ( java , )
public static Integer fishNum=0; //
public static Integer fishMaxNum=10; //
public static Integer monthTemp = 1;//
public static Integer months = 10;//
protected static ArrayList
TS
構想
に質問
// index.js
var readlineSync = require('readline-sync');
var {Market,CrucianCarp,GrassCarp,Bighead}=require('./fish')
var months = readlineSync.question('how months?');
var fishMaxNum = readlineSync.question('fishMaxNum?');
var sum = readlineSync.question('money?');
var fi=new Market(months, fishMaxNum, sum);
fi.init()
// finish.ts
let fishNum:number = 0; //
class Market{
arr:Array = []; //
months:number=0;
fishMaxNum:number=0;
sum:number=0;
constructor(months:number,fishMaxNum:number,sum:number){
this.months=months;
this.fishMaxNum = fishMaxNum;
this.sum = sum;
}
init(){
console.log(` :${this.months} , :${this.fishMaxNum}, ${this.sum} `)
this.expect(this.months)
console.log(`${this.months} , ${fishNum} , ${this.sum} `)
}
//
expect(m:number):void{
while(m-- > 0){
//
this.sell();
//
while (this.sum >= 10 && fishNum != this.fishMaxNum){
if(this.sum >= 15){
let fish:Bighead = new Bighead(undefined, 0, undefined, undefined, 0, undefined);
this.purchase(fish);
}else if(this.sum >= 12){
let fish:GrassCarp = new GrassCarp(undefined, 0, undefined, undefined, 0, undefined);
this.purchase(fish);
}else{
let fish:CrucianCarp = new CrucianCarp(undefined, 0, undefined, undefined, 0, undefined);
this.purchase(fish);
}
}
}
}
//
purchase(fish:Fish):void{
let count:number;
// console.log(fish.getPurcPrice())
count = (this.sum/fish.getPurcPrice() - (this.fishMaxNum-fishNum) > 0 ? (this.fishMaxNum-fishNum) : Math.floor(this.sum/fish.getPurcPrice()))
console.log(`${fish.getName()} ${count} `)
fish.setNum(count)
this.sum -= count * fish.getPurcPrice();
this.arr.push(fish)
fishNum += count
// console.log(count);
}
//
sell():void{
let money:number = 0
for(let i = 0; i < this.arr.length; i++){
if(this.arr[i].getAge() >= this.arr[i].getMaxAge()){
money = this.arr[i].getSellPrice() * this.arr[i].getNum()
this.sum += money
fishNum -= this.arr[i].getNum()
this.arr.splice(i,1)
i--
}else{
this.arr[i].setAge()
}
}
console.log("--------------------")
console.log(` ${money} `)
}
}
//
abstract class Fish{
private name:string;
private sellPrice:number;
private purcPrice:number;
private age:number;
private num:number; //
private maxAge:number;
//
constructor(name:string,age:number,sellPrice:number,purcPrice:number,num:number,maxAge:number) {
this.name = name;
this.age = age;
this.sellPrice = sellPrice;
this.purcPrice = purcPrice;
this.num = num;
this.maxAge = maxAge;
}
//
getAge():number {
return this.age;
}
//
getMaxAge():number {
return this.maxAge;
}
//
getNum():number {
return this.num;
}
//
setNum(num:number):void {
this.num=num;
}
// ,
setAge():void {
this.age++;
}
//
getSellPrice():number {
return this.sellPrice;
}
//
getPurcPrice():number {
return this.purcPrice;
}
//
getName():string {
return this.name;
}
}
// crucianCarp
class CrucianCarp extends Fish{
constructor(name:string=' ',age:number=0,sellPrice:number=20,purcPrice:number=10,num:number,maxAge:number=4){
super(name,age,sellPrice,purcPrice,num,maxAge)
}
}
// grassCarp
class GrassCarp extends Fish{
constructor(name:string=" ",age:number=0,sellPrice:number=25,purcPrice:number=12,num:number,maxAge:number=4){
super(name,age,sellPrice,purcPrice,num,maxAge)
}
}
// bighead
class Bighead extends Fish{
constructor(name:string=" ",age:number=0,sellPrice:number=35,purcPrice:number=15,num:number,maxAge:number=5){
super(name,age,sellPrice,purcPrice,num,maxAge)
}
}
export {Market,Bighead,GrassCarp,CrucianCarp}