HDOJ-ACM1005(JAVA)
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5502918.html

JAVA语言实现:
拿到题目第一反应是简单地实现递归:
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] arg){
Main m = new Main();
Scanner scan = new Scanner(new BufferedInputStream(System.in));
while(scan.hasNextInt()){
int a = scan.nextInt();
int b = scan.nextInt();
int n = scan.nextInt();
if(a==0&&b==0&&n==0){
break;
}
int result = m.f(a,b,n);
System.out.println(result);
}
scan.close();
}
public int f(int a, int b ,int n){
int result = 0;
if(n>2){
result = (a*f(a,b,n-1) + b*f(a,b,n-2))%7;
}else{
result = 1;
}
return result;
}
}
在实现时 还是考虑到JVM能够递归的深度,所以报出Memory Limit Exceeded的错误 让我觉得很正常,而且实现上不优雅~
第二次是将递归改为循环 自我感觉良好 结果 报了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 a = scan.nextInt();
int b = scan.nextInt();
int n = scan.nextInt();
if(a==0&&b==0&&n==0){
break;
}
int result = 1;
int result1 = 1,result2;
if(n>2){
int m = n+1;
for(int i = 3 ; i != m ; i ++ ){
result2 = result1;
result1 = result;
result = (a*result1 + b * result2 )%7;
}
}
System.out.println(result);
}
scan.close();
}
最后还是得分析算法 - -
这个f(n)得出的数字 都在0-6,网上的说法是 A%7,B%7 所以49个数字一个周期
这个有考虑过 但是实现时 还是没去考虑这个 - - 还是太懒~
于是 代码实现上是
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 a = scan.nextInt();
int b = scan.nextInt();
int n = scan.nextInt();
if(a==0&&b==0&&n==0){
break;
}
int result = 1;
int result1 = 1,result2;
int i = 3;
int m = n%49 + 1;
if(m!=1&&m!=2){
while(i++<m){
result2 = result1;
result1 = result;
result = (a*result1 + b * result2 )%7;
}
}
System.out.println(result);
}
scan.close();
}
}
HDOJ-ACM1005(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 ...
随机推荐
- 移动前端javascript事件
移动端事件: // 手势事件 touchstart //当手指接触屏幕时触发 touchmove //当已经接触屏幕的手指开始移动后触发 touchend //当手指离开屏幕时触发 touchcanc ...
- chr(i) 返回整数i对应的ASCII字符
>>> a 122 >>> b 344 >>> c = chr(a) >>> c 'z' 假如整数“i”超过了256将会爆出一个 ...
- Welcome
唔.你好! 这里是 Evensgn 的笔记本. 我是 SD 省的一名高中 OIer,从初中就接触了 OI ,然而水平一直是弱弱哒. Evensgn 是我常用的 ID. 不忘初心,方能始终. E-mai ...
- js高手
http://kb.cnblogs.com/page/173798/ http://kb.cnblogs.com/page/121539/ http://blog.jobbole.com/9648/ ...
- 安装edX DevStack
概述 edX Developer Stack 就是通常我们所说的Devstack,是为本地开发所设计的一个Vagrant实例. Devstack: 和产品(edx Product Stack)对系统的 ...
- Linux设备驱动程序:中断处理之顶半部和底半部
http://blog.csdn.net/yuesichiu/article/details/8286469 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可 ...
- Android OTG支持USB读卡器
我们知道,三星Android手机将USB读卡器通过OTG线插入Micro USB插口后,插拔读卡器里的SD卡,文件管理器也能够识别卡的插拔:而很多手机的OTG连上USB读卡器也来插拔SD卡,会发现文件 ...
- Android 在AlertDialog里添加布局控件
android里很多时候需要在弹出的AlertDialog里有自己的控件,填写信息,比如弹出一个登陆对话框 那么首先你就要创建这么一个布局的inputphonenum.xml文件了 <?xml ...
- [译]GotW #89 Smart Pointers
There's a lot to love about standard smart pointers in general, and unique_ptr in particular. Proble ...
- poj棋盘分割(记忆化)
http://poj.org/problem?id=1191 黑书上P116 想了挺久 没想出来 想推出一公式来着 退不出来.. 想偏了 正解:递归 #include <iostream> ...