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 ...
随机推荐
- python with关键字学习
1.with语句时用于对try except finally 的优化,让代码更加美观, 例如常用的开发文件的操作,用try except finally 实现: f=open('file_name', ...
- jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)
上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...
- MINA实战
backlog,放入到acceptor队列中还未处理最大数量: solinger参数,用来说明close之后是否直接关闭:参数越大,等待时间越长. mina中的udp处理,即使对端关闭也会继续传输,但 ...
- pywinauto简单介绍
Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面.它可以允许你很容易的发送鼠标.键盘动作给Windows的对话框和控件. 其中,最主要功能为对 ...
- Event Aggregator
/** * Created with JetBrains WebStorm. * User: 宇乔 * Date: 13-8-2 * Time: 下午3:01 * To change this tem ...
- swift版本hello
import UIKit class ViewController: UIViewController { @IBOutlet var button : UIButton? //var alertVi ...
- Uva 654 Ratio
题意: 给两个数, n, m 构造一个序列, 分母从1 ~ m, 并且j / i越来越接近n/m. 思路: 如果存在 j / i 趋近于 n / m 那么则有 j = n * i / m + 0.5( ...
- Linux用户行为日志审计
http://my.oschina.net/xiangpang/blog/532999 http://my.oschina.net/chaichuan/blog/508494 http://my.os ...
- char 与 unsigned char的本质区别
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...
- Ember.js demo1
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-1 ...