题意:

斐波拉契数列的另外一个变型,如果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)的更多相关文章

  1. hdoj 1753 (Java)

    刚刚开始用Java,代码难免不够简洁. import java.math.BigDecimal; import java.util.Scanner; public class Main { publi ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)

    Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现 ...

  4. HDOJ(HDU) 2192 MagicBuilding(用Java的Map做了下)

    Problem Description As the increase of population, the living space for people is becoming smaller a ...

  5. 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 ...

  6. hdoj 1753 大明A+B 高精度/java

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. 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) ...

  8. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  10. HDOJ 1326. Box of Bricks 纯水题

    Box of Bricks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

随机推荐

  1. python with关键字学习

    1.with语句时用于对try except finally 的优化,让代码更加美观, 例如常用的开发文件的操作,用try except finally 实现: f=open('file_name', ...

  2. jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)

    上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...

  3. MINA实战

    backlog,放入到acceptor队列中还未处理最大数量: solinger参数,用来说明close之后是否直接关闭:参数越大,等待时间越长. mina中的udp处理,即使对端关闭也会继续传输,但 ...

  4. pywinauto简单介绍

    Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面.它可以允许你很容易的发送鼠标.键盘动作给Windows的对话框和控件. 其中,最主要功能为对 ...

  5. Event Aggregator

    /** * Created with JetBrains WebStorm. * User: 宇乔 * Date: 13-8-2 * Time: 下午3:01 * To change this tem ...

  6. swift版本hello

    import UIKit class ViewController: UIViewController { @IBOutlet var button : UIButton? //var alertVi ...

  7. Uva 654 Ratio

    题意: 给两个数, n, m 构造一个序列, 分母从1 ~ m, 并且j / i越来越接近n/m. 思路: 如果存在 j / i 趋近于 n / m 那么则有 j = n * i / m + 0.5( ...

  8. Linux用户行为日志审计

    http://my.oschina.net/xiangpang/blog/532999 http://my.oschina.net/chaichuan/blog/508494 http://my.os ...

  9. char 与 unsigned char的本质区别

    在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...

  10. Ember.js demo1

    <!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-1 ...