HDOJ-ACM1021(JAVA)

题意:
斐波拉契数列的另外一个变型,如果F(n)能被3整除,则输出yes,否则输出no。(n<1000000)
解题思路:
看到(n<1000000)这个条件,有点感觉递归量有点大,因此要将递归转为循环~不过有没更巧妙地做法呢,暂且不知。
递归java代码实现:(结果当然是Time Limit Exceeded)
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] arg){
Scanner scan = new Scanner(new BufferedInputStream(System.in));
while(scan.hasNextInt()){
int n =scan.nextInt();
if(check(n)){
System.out.println("yes");
continue;
}
System.out.println("no");
}
scan.close();
}
static boolean check(int n){//检测F(n)能不能整除3
int result = getResult(n);
return result%3==0;
}
static int getResult(int n){
if(n==0){
return 7;
}
if(n==1){
return 11;
}
return getResult(n-1) + getResult(n-2);
}
}
于是我立刻就把递归改为了循环:(结果竟然是Wrong Answer),可能是数字越界了 吧,或者算法有错,或者其他原因~
/*
* 循环实现
* */
static int getResult2(int n){
int result = 0;
if(n==0){
return result += 7;
}
if(n==1){
return result += 11;
}
int preNum1 =7;
int preNum2 =11;
int len = n + 1;
for(int i = 2 ; i != len ; i ++){
int temp = preNum2;
preNum2 = preNum1 + preNum2;
preNum1 = temp;
result = preNum2;
}
return result;
}
在找错误的过程中,想到是被3整除,因此这道题的巧妙解法就诞生了。只需要求出前两个数的取余结果相加就行了。
另外一点,往往这种函数都是有周期性的:观察得取余结果的周期为8(1 2 0 2 2 1 0 1)
不得不惊叹数学的巧妙,哈哈哈
结果当然Accepted
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] arg){
Scanner scan = new Scanner(new BufferedInputStream(System.in));
while(scan.hasNextInt()){
int n =scan.nextInt();
if(resultArray[n%8]==0){
System.out.println("yes");
continue;
}
System.out.println("no");
}
scan.close();
}
static int[] resultArray = createResultArray();
/*
* 观察得取余结果周期为8
* 因此生产取余结果周期表(0-2序列)
* */
static int[] createResultArray(){
int[] resultArray = new int[8];
for(int i = 0 ; i != 8 ; i ++ ){
resultArray[i] = getResult(i);
}
return resultArray;
}
/*
* 由于该题的特殊环境,能不能被3整除
* 因此只需要求出前两个数的取余结果相加就行了
* */
static int getResult(int n){
int result = 0;
if(n==0){
return result += 7%3;
}
if(n==1){
return result += 11%3;
}
int preNum1 =7%3;
int preNum2 =11%3;
int len = n + 1;
for(int i = 2 ; i != len ; i ++){
int temp = preNum2%3;
preNum2 = (preNum1 + preNum2)%3;
preNum1 = temp;
result = preNum2;
}
return result;
}
}
HDOJ-ACM1021(JAVA)的更多相关文章
- hdoj 1753 (Java)
刚刚开始用Java,代码难免不够简洁. import java.math.BigDecimal; import java.util.Scanner; public class Main { publi ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)
Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现 ...
- HDOJ(HDU) 2192 MagicBuilding(用Java的Map做了下)
Problem Description As the increase of population, the living space for people is becoming smaller a ...
- HDOJ(HDU) 2133 What day is it(认识下Java的Calendar类---日期类)
Problem Description Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me wha ...
- hdoj 1753 大明A+B 高精度/java
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdoj 1002 A + B Problem II 高精度 java
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 2317. Nasty Hacks 模拟水题
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- HDOJ 1326. Box of Bricks 纯水题
Box of Bricks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- codevs 1743 反转卡片
题目描述 Description [dzy493941464|yywyzdzr原创] 小A将N张卡片整齐地排成一排,其中每张卡片上写了1~N的一个整数,每张卡片上的数各不相同. 比如下图是N=5的一种 ...
- Elasticsearch基础概念理解
熟悉ES中的几个关键概念: 节点(Node):一个elasticsearch运行的实例,其实就是一个java进程.一般情况下,一台机器运行在一台机器上. 集群(Cluster): 好几个有相同集群名称 ...
- GC的代机制
1.代为CLR垃圾回收器采用的一种机制,基于以下几点假设:对象越新,生存期越短:对象越老,生存期越长: 2.托管堆仅支持3代(GC.MaxGeneration,第0代.第1代.第2代),CLR初始化会 ...
- Hadoop集群(第5期副刊)_JDK和SSH无密码配置
1.Linux配置java环境变量 1.1 原文出处 地址:http://blog.csdn.net/jiedushi/article/details/6672894 1.2 解压安装jdk 在she ...
- 0xc0000428 winload.exe无法验证其数字签名的解决方法
只要把windows/system32/boot中的winload.exe复制到windows/system32中替换即可!! 只有启动画面会有变化,可以使用魔方等软件进行修复,恢复到之前的样子
- 静态分析安全测试(SAST)优缺点探析
静态分析安全测试(SAST)是指不运行被测程序本身,仅通过分析或者检查源程序的语法.结构.过程.接口等来检查程序的正确性,那么采用静分析安全测试的方法有什么优缺点呢,且让小编给你说道说道. 许多公司都 ...
- ASP.NET MVC中HttpContext, HttpContextBase, HttpContextWrapper联系
ttpContext HttpContext是最原始的ASP.NET Context. MVC的目的之一是能够单元测试.HttpContext没有base class,并且不是virtual,所以不能 ...
- Cassandra查询语言CQL的基本使用
在window环境下运行CQL语言要先安装python环境,在linux下不需要,cassandra内置了python. 1.查看python版本:python --version2.运行pythod ...
- Java多态的体现之继承
/** * * 功能:演示多态 */ package com.litao; public class Demo5 { public static void main(String[] args) { ...
- PCB使用技巧
1.元器件标号自动产生或已有的元器件标号取消重来Tools 工具|Annotate…注释All Part:为所有元器件产生标号Reset Designators:撤除所有元器件标号2.单面板设置:De ...