一道java题目,求助啊,各位大侠帮帮忙

假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。

结果成负数了30分钟的话还可以

思路应该没问题 不知道是哪里有问题 你参考下。

public static void main(String[] args){
int x=10;
int y=89;
for(int i=0;i<=120;i++){
if(i>0){
if(i%4==0){
y=y*2;
}
if(i%6==0){
x=x*2;
}
if(i%2==1)
y=y-x;
}
}
System.out.println("X="+x+" Y="+y);
}

追问

好像没有把这个考虑进去,一个新出生的X,半分钟之后吃掉1个Y
但我不懂怎样改哦,求指教

追答

i的值是每0.5分钟 i+1 ; i%4==0说明满足2分钟钟时运行,进行Y的分裂 i%6==0说明 满足3分钟时运行 X的分裂 i%2==1 时每出现0.5 1.5 2.5 这样的时间x吃掉Y
如果想改成30分钟只用把i<=60就行了。

追问

我参考你们的,改了一下

结果是没错,(从此开始,每隔1分钟吃1个Y。)可我觉得,这个好像没有考虑进去

追答

if(x>0 && y>0)这就不行 ,因为第0分钟时x %2 y%6 都满足等于0的条件 但是第0分钟 x y是不分裂的。所以用的是if(i>0)

i%2==1 的意思是当i除以2余数是1时  这样就是0.5分钟开始 每分钟触发一次。比如i=1 i=3 i=5都是满足i%2==1的。 

public static void main(String[] args){
int x=10;
int y=89;
for(int i=0;i<=120;i++){
if(i>0){
if(i%4==0){
y=y*2;
}
if(i%6==0){
x=x*2;
}
if(i%2==1)
y=y-x;
if(y<=x){
System.out.print("第"+i/2+"分钟 ");
break;
}
}
}
System.out.println("X="+x+" Y="+y);
}

追问

for(int i=0;i0) //觉得你这个是多此一举,我直接写for (int i = 1; i <= 120; i++)不就行了
结果你这样一分析,我突然觉得我的代码是对的

追答

嗯从1开始就行。 但是你的代码 最后的y<x y直接就等于0了明显不合适,虽然y比x小了,但还并不是0 最后直接y<x就行了退出循环就行了,还有不用加i%2这个条件了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-22
这个数目非常大

import java.math.BigDecimal;
public class Cell { private static BigDecimal x = new BigDecimal(10);
private static BigDecimal y =new BigDecimal(89);
public static void main(String[] args) {
for(int i=1;i<=60;i++){
System.out.println(i+"分钟的时候剩余y====="+get(i));
}
}
//min分钟的时候 有 y多少 只
public static BigDecimal get(int min){
if(min ==0){
return y;
}else if(min%2==0&&min%3!=0){
//1.5分钟后
y=get(min-1).subtract(x) ;
//2分钟后
return y= y.multiply(new BigDecimal(2)) ;
}else if(min%3==0&&min%2!=0){
//2.5分钟的时候吃掉y
y=get(min-1).subtract(x) ;
//3分钟后
x= x.multiply(new BigDecimal(2)) ;
return y ;
}else if(min%6==0){
//5.5分钟的时候
y=get(min-1).subtract(x) ;
//6分钟的时候
x= x.multiply(new BigDecimal(2)) ;
return y= y.multiply(new BigDecimal(2)) ;
}else{
return y=get(min-1).subtract(x) ;
}
}
}

结果如下图所示:
1分钟的时候剩余y=====79
2分钟的时候剩余y=====118
3分钟的时候剩余y=====186
4分钟的时候剩余y=====464
5分钟的时候剩余y=====1216
6分钟的时候剩余y=====6848
7分钟的时候剩余y=====41984
8分钟的时候剩余y=====559104
9分钟的时候剩余y=====8474624
10分钟的时候剩余y=====262995968
11分钟的时候剩余y=====8347713536
12分钟的时候剩余y=====533121204224
13分钟的时候剩余y=====34100966588416
14分钟的时候剩余y=====4364300953059328
15分钟的时候剩余y=====558620385868775424
16分钟的时候剩余y=====143006148080313565184
17分钟的时候剩余y=====36609552094249577611264
18分钟的时候剩余y=====18744089253621901115260928
19分钟的时候剩余y=====9596973605620693002465837056
20分钟的时候剩余y=====9827300960165205986613808594944
21分钟的时候剩余y=====10063156182435883418722635597479936
22分钟的时候剩余y=====20609343861427705324033025603344007168
23分钟的时候剩余y=====42207936228178021134047098786142826266624
24分钟的时候剩余y=====172883706790610489688844775574556561117282304
25分钟的时候剩余y=====708131663014338841760691890361397638820029005824
26分钟的时候剩余y=====5801014583413462902522750941751338071366181236768768
27分钟的时候剩余y=====47521911467323087869005313939294545825289918205925523456
28分钟的时候剩余y=====778598997480621471410137524488651952853163104239384289869824
29分钟的时候剩余y=====12756565974722502187462607123776926852707417079549551804862693376
30分钟的时候剩余y=====418007153859706951678650272073714538232386873554718335684537365823488
31分钟的时候剩余y=====13697258417674877392605884233918211534793510250218147748946700509206544384
32分钟的时候剩余y=====897663527660740764801818966317609453554646678007616215178632709648451563945984
33分钟的时候剩余y=====58829276948774306762052007506967418927065003672485456188689351266599007385586499584
34分钟的时候剩余y=====7710870988229745935915680726844932758454053338995257143528787047622592962880412579790848
35分钟的时候剩余y=====1010679282169249259312340104226745209183463208008894467955942430823419587594458785796394582016
36分钟的时候剩余y=====264943509744975677833174084282406566105349767962024612732577472408411252258003661545984874694836224
37分钟的时候剩余y=====69453351418586904089899587150127148581996542218728471653007365359155002747177031844697735824876593217536
38分钟的时候剩余y=====36413558708548090771485274747765862161590309420866249341981838718570459484737471258596890529154796637491560448
39分钟的时候剩余y=====19091191868187261414400471726956668339687899309306273094115933711940311181036436669760795346037183962982907132248064
40分钟的时候剩余y=====20018565604376325824866389041565315460935439702343970171299182188908337672508769649030536399395242834632280208157079240704
41分钟的时候剩余y=====20990987447174510228135098755648392224765666298834802602074665167174749672461103641266672052459354465428946458681821869704740864
42分钟的时候剩余y=====44021291306816918473953978625605537050951763767731707864615428286661312466020047249382782021317034963631617979310974671066795541004288
43分钟的时候剩余y=====92319339106673714211489534182645903237477593242418703473160933008406307409932301804280003234492441093495081427319725014791928564932092624896
44分钟的时候剩余y=====387215373292477986212107399180408442532565219245521171929711892683176671386231107454886274262633104009717442360335055917180074253998753581507805184
45分钟的时候剩余y=====1624098989062133587481386912811983852148108429342341378552425920927024958488943046569719199129028196931914650159426340362046225312643462798489714232918016
46分钟的时候剩余y=====13623929772438526309015062107909910238000439555248597983420806479310191444351167762097445517028758914112191961428562350979860464872548170506443741757532660563968
47分钟的时候剩余y=====114285806280516001304014222118909936301772391256674830978632077749961572183831075808125336835713425585035988551150074678979590298384458870438463000710578489115598127104
48分钟的时候剩余y=====1917397657702373545333728271560929685881076590949745081088469424650027205032718619586315612662291826951570530504650705470889061204626060545540399835970119367328413308644491264
49分钟的时候剩余y=====32168594661166784682749751297284374500838972278907518370358535051213289905096072582770708657680126090312825958527306890476447752533631981556965778456812949809695225450666991355428864
50分钟的时候剩余y=====1079398922093683917295968102921640328850935238282487359446946249626641647392811985094654864220437498931916441974160125262857758807740532642035235130363867460588645484768794486507245150404608
51分钟的时候剩余y=====36218617732265814632401185583653181742886344589353518893422115538761482351359283248930670646182423440459433450442670873539612532192326884092381367243823901580752922178670204324537054194997401747456
52分钟的时候剩余y=====2430590291662614966015021156772141996750642666504061147340095246282508972928334900803114140332063818099263015484201751773644491903460268144434183008385692385486637386015520987895068154813888463647333679104
53分钟的时候剩余y=====163114153322906761638666676766944356248627320619018394984530413629819331798776084311063790986224395266105673545639032011231991741999570413081296598594084515477738117153202396918993176940708071947904914012153839616
54分钟的时候剩余y=====21892811063644195902979398304969656998113362092212202565030267264294583746563727238338366949082960556017194111033121612021575509024365946173437325217298409240793134677051184433566393972297504757901781732438122585200263168
55分钟的时候剩余y=====2938403360495587374484803271300078471226075746458048322154134723446394553164805778142639403198062689153054848736533892572046446166811662594330859408731179113668758696633336488477848727681298426599017384995038461456905989001314304
56分钟的时候剩余y=====788771645986565382857670931201728277259354522091006586227480056773766813434708414634182814605469610675825862309681198009546678805890304470379244706802549711209738456738900708179157995650968524923390636028477996491990041857935710076534784
57分钟的时候剩余y=====211734276470274248421213479515080558094209261403161426472976928770971983402012878862434192476279002676448629053284812990165477270223781016074879565388296625570897101992139424943364607028580306574882764528345887025636871640697728154608050911576064
58分钟的时候剩余y=====113673974110256276640011440893954616977507108088361674713768067104230767855487516909942065030495276842976832222900834943809073925598801325703974069088284490082322192659114478157133514392330199096757429673258286072057757389374419336074572250874009477971968
59分钟的时候剩余y=====61028250151237675793447237963171510503324924605881308889428001142725571397035867408055662550760938121578240056284679343089330113061675839431525215418529675853712093718055693002472817385048215393725877421027089825921010308864595926256310724882897221481641726181376
60分钟的时候剩余y=====65528584632918217863976684538337822512675262610981477734441836263664239363295520464147839027690844604121367992372521126294086479955012420639298938960006125382883085771038515619086546558965639606855449138929375391766620126890659953232430357456840003174979345388227887366144追问

很遗憾的说一句,结果为0;你的思路不对

第2个回答  2013-04-22
#include<stdio.h>
void main(){
double X=10,Y=89;
for(int i=1;i<=120;i++){ //i:表示半分钟
if(X>0&&Y>0){
if(i%4==0){
Y=2*Y; //Y分裂
}
if(i%6==0){
X=2*X;
Y=Y-X;
continue;
}
if(i%2==0){
Y=Y-X;
}
}
else{
printf("i=%d\n",i);
break;
}
}
printf("Y=%0.1f,X=%0.1f\n",Y,X);
}追问

我说的是java题目

追答

java好久没写了,你就按这个改一改吗!结果:

追问

结果不对,结果应该是x=0的,我看了一下,(一个新出生的X,半分钟之后吃掉1个Y)好像没有考虑进去啊

一个比较简单的java题,麻烦各位大侠帮帮忙,好的追加分
这是以前学JAVA时做过的例子,可直接用 \/ 测试类(包含main方法)\/ public class HelloWorld { public static void main(String[] args){ Dog animal1 = new Dog();Cat animal2 = new Cat();Frog animal3 = new Frog();if(animal1.isMammal())System.out.println("狗是哺乳动物");else S...

几道简单的JAVA 填空题 各位大侠帮帮忙
1、覆盖2、方法和变量3、接受参数4、方法体5、抽象常量和抽象方法6、抽象,公开7、java class2、分支和循环3、class ,new,this,thows

各位大侠帮帮忙,帮我解释一下这道题,打印输出结果是5,因为数据溢出了...
你的写法有问题,java 中的long赋值需要写 final long a=24*60*1000*1000L;必须在后面加个L

哪位大侠,能帮我写一个JAVA的程序啊,小弟求各位出手相助啊
方法一:直接使用TreeSet会自动按照二叉搜索树排好序 Scanner scan1 = new Scanner(new FileInputStream("file1.txt"));\/\/ 初始时从小到大排序 Scanner scan2 = new Scanner(new FileInputStream("file2.txt"));\/\/ 初始时从小到大排序 TreeSet ts = new TreeSet();\/\/ TreeSet自动排好序 d...

请各位大侠帮忙分析一下下面的这个程序,详细说明这里this的用法。先谢...
我们从main方法来看.首先main方法里,是new diaoyong(3L); 也就是实例化一个diaoyong类.那么是去找哪个构造方法呢?因为参数是3L,也就是一个long类型的值,所以程序就跳到public diaoyong(long x)这里了.这里是关键的this的用法.this本身表示对当前对象的引用,也就是实例化的diaoyong实例.但是在构造...

java编程,采用for循环,题目如下:
for(int i=0;i<n;i++){ sum+=(int)(Math.random()*100);} System.out.println((float)sum\/n);循环了101次平均时却是只算了100次 import java.util.*;public class Test6 { public static void main(String[] args){ Random R=new Random(101);int sum=0;for(int i=0;i<100;i...

Java求100以内的素数,各位大侠帮我看下那错了,谢谢!
public class sushu { public static void main(String args[]){ int i,j;for(j=2;j<=100;j++){ for(i=2;i<=j\/2;i++){ if(j%i==0)break;} System.out.println(j+"是素数!");} } } 改成这样就可以了,是你的那个判断条件有问题。

这是一道计算机考研的真题,希望各位大侠帮帮忙,小弟将不胜感激!_百度...
直接编码 一位代表一个微操作命令 那就是 3+3+5+8=19 字段直接编码 互斥的放一个段,还要留出一种情况不发 各段需要位数 2+2+3+4=11 同理水平型字段直接编码 2+2+3+4+3=14 26-14=12 故存储器的地址位数为12位 指令长为26位 ,所以2^12*26 ...

JAVA 面向对象的题目
java.io.*;import java.util.*;public class gwxt { private String adm, pas;publicvoid in(){ Scanner in = new Scanner(System.in);System.out.println("\\n" + "请输入用户名:");adm = in.next();System.out.println("\\n" + "请输入密码:");pas = in.next();\/\/没有针对...

关于面试JAVA工程师中遇到的一些棘手的问题,求大家帮忙来解答下,求助...
五:你可以说自己的公司比较小,业务不稳定倒闭了,或者说开的薪资和能力不成正比留不住人解散了,总之不要明显的说公司老板不好之类的话。六:项目经理说你公司有加班费没,这是再考察你真正的上过班没!大家都知道程序员加班很多很累,是没有加班费的,国内不管是大公司还是小公司都没加班费,华为...

相似回答