求大佬帮我解答一下并解释一下

chance_wei 2021-04-24 08:08:33
一个细胞的生命周期是3小时,1小时分裂一次,求n小时后容器内有多少个细胞。
...全文
158 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2021-04-25
  • 打赏
  • 举报
回复
引用 楼主 m0_57306111 的回复:
一个细胞的生命周期是3小时,1小时分裂一次,求n小时后容器内有多少个细胞。
for循环的很难解答, 我们设 分裂数为x,死亡数为y,生存数为z,我们可以得出。 z(n)=z(n-1)+x(n)-y(n) x(n)=z(n-1) y(n)=x(n-3)=z(n-4) 我们整理一下可以得出 z(n)=2*z(n-1)+z(n-4)

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 5;
		System.out.println(survival(n));
	}
	
	static int  survival(int n) {
		switch (n) {
			case 0 : 
				return 1;
			case 1:
				return 2;
			case 2:
				return 3;
			case 3:
				return 7;
			default :
				return 2*survival(n-1)-survival(n-4);
		}
	}
nayi_224 2021-04-25
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 5;
		Queue<Integer> queue = new LinkedList();
		queue.add(0);
		for(int i = 0; i < n; i++){
			int k = queue.size();
			for(int j = 0; j < k; j++){
				int num = queue.poll();
				queue.add(0);
				queue.add(0);
				if(num != 2)
					queue.add(num + 1);
			}
		}
		System.out.println(queue.size());
	}
chance_wei 2021-04-25
  • 打赏
  • 举报
回复
谢谢啦,不过能否用for循环讲一下
chance_wei 2021-04-25
  • 打赏
  • 举报
回复
引用 7 楼 maradona1984的回复:
这题有个问题,第三小时是先分裂再死亡呢,还是先死亡?
是分裂后再死亡的。
chance_wei 2021-04-25
  • 打赏
  • 举报
回复
引用 7 楼 maradona1984的回复:
这题有个问题,第三小时是先分裂再死亡呢,还是先死亡?
嗯 是先分裂再死亡的
maradona1984 2021-04-25
  • 打赏
  • 举报
回复
这个问题关键在于保存近三个小时新增数,(当前数-三个小时前的新增数)*2 (3小时死不复制),当前数*2-三个小时新增数(3小时复制再死) 简化了模型,就很简单
maradona1984 2021-04-25
  • 打赏
  • 举报
回复
按照第三次死不分裂来算的

    public static void main(String[] args) {
        int n = 7;
        int sum = 1;
        //存前三次新增的数量,用来减的,初始化第0次新增1
        int[] incr = new int[]{1, 0, 0};
        for (int i = 1; i <= n; i++) {
            System.out.println(String.format("第%s次开始,这次死亡数据为第%s次新增,数量为%s,复制基数为(%s-%s)*2=%s",
                    i, i - 3, incr[i % 3], sum, incr[i % 3], (sum - incr[i % 3]) * 2));
            int temp = (sum - incr[i % 3]) * 2;
            incr[i % 3] = temp - sum;
            System.out.println(String.format("第%s次新增%s", i, incr[i % 3]));
            sum = temp;
        }
        System.out.println(sum);
    }
maradona1984 2021-04-25
  • 打赏
  • 举报
回复
这题有个问题,第三小时是先分裂再死亡呢,还是先死亡?
chance_wei 2021-04-25
  • 打赏
  • 举报
回复
引用 3 楼 nayi_224的回复:
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 5;
		Queue<Integer> queue = new LinkedList();
		queue.add(0);
		for(int i = 0; i < n; i++){
			int k = queue.size();
			for(int j = 0; j < k; j++){
				int num = queue.poll();
				queue.add(0);
				queue.add(0);
				if(num != 2)
					queue.add(num + 1);
			}
		}
		System.out.println(queue.size());
	}
☒谢谢大佬的解答啦
chance_wei 2021-04-25
  • 打赏
  • 举报
回复
引用 4 楼 qq_39936465的回复:
[quote=引用 楼主 m0_57306111 的回复:]一个细胞的生命周期是3小时,1小时分裂一次,求n小时后容器内有多少个细胞。
for循环的很难解答, 我们设 分裂数为x,死亡数为y,生存数为z,我们可以得出。 z(n)=z(n-1)+x(n)-y(n) x(n)=z(n-1) y(n)=x(n-3)=z(n-4) 我们整理一下可以得出 z(n)=2*z(n-1)+z(n-4)

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 5;
		System.out.println(survival(n));
	}
	
	static int  survival(int n) {
		switch (n) {
			case 0 : 
				return 1;
			case 1:
				return 2;
			case 2:
				return 3;
			case 3:
				return 7;
			default :
				return 2*survival(n-1)-survival(n-4);
		}
	}
[/quote] 谢谢大佬的解答啦
时间胶嚢 2021-04-24
  • 打赏
  • 举报
回复
用递归 int A(int value ,int n){ if(n==0||value==3) return 0; value++; n--; return A(value,n)+A(0,n); }

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧