蓝桥杯JAVA答题技巧,[蓝桥杯][2015年第六届真题]机器人繁殖 (Java代码)

该博客讨论了如何处理因机器人数量随时间指数增长导致的整型溢出问题。作者提出使用大数运算来解决这个问题,特别是通过Java的BigInteger类进行乘除运算。文章详细介绍了算法思路,包括设立初始方程、找出数列增长规律,并给出C语言和Java的代码实现示例,强调在处理大数时使用现有库的优越性和稳定性。
摘要由CSDN通过智能技术生成

解题思路:

设开始有x个机器人,若第n年后,机器人数目为s,有方程ax-b=s,列举出前n项后找到a,b增加的规律:int a=1,b=0,d=1;

for(i=0;i

d*=2;

a+=d;

b+=d-1;

}

再通过x=(s+b)/a可求出x的值;以上只是算法描述,当n取值为30,a的值就达到整型数的上限,n再增加,就会产生溢出,所以只能用大数进行加减乘除,大数加法用c语言实现并不难,但是要做乘除运算,实现起来很繁琐;只有考虑用java提供的BigInteger,问题就迎刃而解了。

注意事项:

遇到长度超过10、甚至超过20而且还要达到50的大数,用现有的库解决,远比自己再实现一遍更稳定和快速。

参考代码:import java.util.Scanner;

import java.math.BigInteger;

class Main{

public static void main(String[] args){

Scanner in=new Scanner(System.in);

int i,n;

n=in.nextInt();

String s=in.next();

BigInteger a=new BigInteger("1");       //方程ax-b=s中的a

BigInteger b=new BigInteger("0");       //方程ax-b=s中的b

BigInteger d=new BigInteger("1");

BigInteger sum=new BigInteger(s);

BigInteger two=BigInteger.valueOf(2);

BigInteger one=BigInteger.valueOf(1);

for(i=0;i

d=d.multiply(two);                  //d是上次的两倍

a=a.add(d);                         //a累加d

b=b.add(d.subtract(one));           //b累加d-1

}

BigInteger x=sum.add(b);

x=x.divide(a);                          //x=(s+b)/a

System.out.println(x);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯java竞赛是一个测试学生编程能力和应用知识的比赛。以下是一些正确的答题方式: 1. 熟悉题目要求:在参赛前,确保你已经充分理解了比赛题目的要求,包括输入、输出和限制条件。这有助于你制定解题方案和写代码。 2. 规划解题思路:在开始编写代码之前,确定你的解题思路。这可能包括确定所需的数据结构、算法和代码逻辑。提前规划有助于写出更有效和正确的代码。 3. 编写清晰的代码:确保代码清晰易读,有详细的注释和适当的缩进。这有助于你和其他人理解你的代码,并使调试过程更加容易。 4. 测试和调试:在提交你的答案之前,确保你的代码经过了充分的测试和调试。测试数据应包括题目提供的示例数据以及其他你认为有可能导致程序出错的情况。 5. 注意性能和效率:在编写代码时,要考虑到性能和效率。尽量使用高效的算法和数据结构,以提高程序的执行速度和减少资源消耗。 6. 阅读题目和规则:在比赛期间,仔细阅读题目和规则,确保你理解和遵守比赛的规定。不要忽略任何细节,以免丢分或失去机会。 7. 学习和练习:参加蓝桥杯是一个学习和成长的过程。不论你的表现如何,都要把比赛当作一个机会来提升自己的编程能力。学习其他参赛者的代码和解题思路,积极参与讨论和交流,不断改进自己的技术水平。 总之,蓝桥杯java答题方式需要准确理解题目、规划解题思路、编写清晰的代码、测试和调试、关注性能和效率,以及遵守比赛规定。通过不断学习和练习,你将有机会取得优异的成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值