1、问题描述

X星系的机器人可以自动复制自己。它们用1年的时间可以复制出2个自己,然后就失去复制能力。
  每年X星系都会选出1个新出生的机器人发往太空。也就是说,如果X星系原有机器人5个,
  1年后总数是:5 + 9 = 14
  2年后总数是:5 + 9 + 17 = 31

  如果已经探测经过n年后的机器人总数s,你能算出最初有多少机器人吗?

  数据格式:

  输入一行两个数字n和s,用空格分开,含义如上。n不大于100,s位数不超过50位。

  要求输出一行,一个整数,表示最初有机器人多少个。

  例如:
  用户输入:
  2 31

  则程序应该输出:
  5

  再例如:
  用户输入:
  97 2218388550399401452619230609499

  则程序应该输出:
  8

2、代码实现

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int year = scanner.nextInt();
		BigDecimal s = new BigDecimal(scanner.next());


		for(int i = 1;i <= 100;i++) {
			BigDecimal t = new BigDecimal(i);
			BigDecimal newNum = new BigDecimal(0);
			BigDecimal pre = new BigDecimal(i);
			for(int j = 0;j < year;j++) {
				newNum = pre.multiply(new BigDecimal(2)).subtract(new BigDecimal(1));
				t = t.add(newNum);
				pre = newNum;
			}
			if(s.compareTo(t) == 0) {
				System.out.println(i);
				break;
			}
		}
		
	}
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐