首页 > 其他分享 >机器人繁殖(针对何时用int,long long,double)

机器人繁殖(针对何时用int,long long,double)

时间:2023-03-11 20:23:29浏览次数:41  
标签:输出 int double 机器人 long 输入

题目描述

X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己,然后就失去复制能力。

每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说,如果 X 星系原有机器人 5 个,1 年后总数是:5 + 9 = 14,2 年后总数是:5 + 9 + 17 = 31。

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

输入描述

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

输出描述

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

输入输出样例

示例 1

输入

2 31

输出

5

示例 2

输入

97 2218388550399401452619230609499

输出

8

想法:

  • 先正推出公式,原有a个机器人,总数为是,s=a,第一年就是a+a*2-1,第二年就是s-a的差 * 2 -1
  • 所以s为数组,今年的数等于去年的数-前年的数的差×2-1

自己的想法是通过找规律逆推出结果,发现行不通,参考别人代码后,明白了主要还是通过正推推出匹配的条件后得出结果,虽然时间复杂度高,但是还没有别的办法。

#include<bits/stdc++.h>
using namespace std;
int n;
long long s;
long long res(long long a,long long b){
	for(long long i = 1;i<=n;++i){
		a = a*2-1;
		b+=a;
	}
	return b;
	
}
int main(){
	
	cin >> n >> s;
	for(long long i = 1;i <=s;++i){
		if(res(i,i) == s){
			cout << i << endl;
			return 0;
		}
		
		
	}
}

有一个超时了

把所有long long改成double

#include<bits/stdc++.h>
using namespace std;
double n;
double s;
double res(double a,double b){
	for(double i = 1;i<=n;++i){
		a = a*2-1;
		b+=a;
	}
	return b;
	
}
int main(){
	
	cin >> n >> s;
	for(double i = 1;i <=s;++i){
		if(res(i,i) == s){
			cout << i << endl;
			return 0;
		}
	}
  return 0;
}
  • 其中关于类型进行了整理,因为不小于50位,所以使用double而不是long long。

标签:输出,int,double,机器人,long,输入
From: https://www.cnblogs.com/isku-ran/p/17206841.html

相关文章

  • 【THM】Introductory Researching(信息检索技巧介绍)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/introtoresearch本文介绍:主要涉及渗透测试中的一些信息检索技巧。简介毫无疑问,有效的信息检索能力是网络......
  • ES6-ES11 ES11 BigInt
    原视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title......
  • 10 Best MySQL Client GUI Interface – Free Download
    10BestMySQLClientGUIInterface–FreeDownloadThoseMySQLclientGUIinterfaceiseasysoftwareforwindowstouseforcontrollingdatabaseiswarehoused......
  • Supporting integration tests with WebApplicationFactory in .NET 6
    https://andrewlock.net/exploring-dotnet-6-part-6-supporting-integration-tests-with-webapplicationfactory-in-dotnet-6/ Thisisthesixthpostintheseries:......
  • 使用整型 int 来统计学生人数
    使用Java的集合类java.util.ArrayList存储多个学生对象理解默认构造函数学习如何利用J2SEAPI文档,理解如何使用java.util.ArrayList限定java.util.ArrayList......
  • mysql: Specified key was too long; max key length is 767 bytes
    问题记录:原因如果该字段参与了索引,在对该字段进行拓展长度时会提示超过索引最大值我使用的解决方案,在使用联合索引时使用改字段的前一部分作为联合索引\然后再......
  • print()打印有符号负数会多出0xff
    目录如果以二进制“%x”打印一个有符号char或者short类型的数据,而恰好这个数是负的,最高位为1,那么会在高位多打印多个'f',哪怕用"%2x"或者"%4x"去限制输出n位,还是会多打印'f......
  • wsprintf();字符集拼接多字符集
    环境vs10报错解决方法ALT+F7键盘使用多字符集......
  • P4084 Barn Painting G
    \(P4084\)\(Barn\)\(Painting\)\(G\)一、题目描述给定一颗\(N\)个节点组成的树,\(3\)种颜色,其中\(K\)个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数。二、......
  • CWinThread Pump Message, crashing
    如果在MFC消息循环中收到非法访问异常试着找找是不是在多线程中哪个线程提前结束了,而线程创建的对象仍然存活,并且触发了 AccessViolation c0000005大消息泵里发现......