- 浏览: 686162 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (297)
- J2SE (78)
- swt/飞信 (20)
- mysql/mssql (17)
- 设计模式 (5)
- windows (18)
- 闲言碎语 (19)
- struts 1.x (6)
- JVM (6)
- tomcat/jetty (8)
- jquery/javascript (15)
- web前端 (6)
- J2EE (0)
- PHP (6)
- 算法设计 (17)
- 数据结构 (3)
- C/C++ (6)
- linux (19)
- 程序打包 (8)
- eclipse/myeclipse (10)
- 其他杂项 (13)
- 应聘 (9)
- spring/spring mvc (4)
- Maven/Ant (2)
- ERROR (1)
- nosql/hbase (1)
- hibernate (3)
- Solr/Lucene (1)
最新评论
-
乔木1937:
太感谢了,看到你的文章终于解决这个问题了!
[转载]通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。 -
xianweisi:
竟然还有马
精简JRE - 实例Swing计算器 with 精简JRE(续) -
Javkburd:
我刚也遇到这个问题,然后也把默认端口改成了1433,只差最后没 ...
[转载]通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。 -
yeshaoting:
kingbinchow 写道 最近的爪哇岛 没有什么货进项呀 ...
jQuery方法区别(四)click() bind() live() delegate()区别 -
kingbinchow:
最近的爪哇岛 没有什么货进项呀!
jQuery方法区别(四)click() bind() live() delegate()区别
K尾相等数
问题描述:
从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对"K尾相等数".请编一程序,输出M+N值最小的K尾相等数.
方式一(按我的思路写的,很糟糕的程序)
/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All rights reserved. * Author: Jarg Yee <yeshaoting@gmail.com> * http://jarg.iteye.com/ */ import java.util.Scanner; /* * 从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对"K尾相等数".请编一程序,输出M+N值最小的K尾相等数. * K尾相等数 * * 耗时较高 */ public class EqualNumber { public static void main(String[] args) throws Exception { final int thresholdValue = 1000; //临界值1000 System.out.println("输入一个自然数K(K>1):"); Scanner s = new Scanner(System.in); int index = 0; //最小幂index,可以看作找K尾相等数循环下界 long k = s.nextLong(); //要求输入大于或等于2的整数 if(k >= thresholdValue) { index = 1; k = (int)k%thresholdValue; //若k是很大的整数,则会出现乘积会出现上溢的情况 // 在数论基础知识里曾证明过(M*N)%R = (M%R *N%R)%R // 这样做的原因是避免后面进行乘运算时数据溢出 } int m, n; long mRemainder, nRemainder; //m,n次幂对应的余数 /* @TODO 找出满足大于或等于1000的最小幂index,可以看作找K尾相等数循环下界 由于2的10次幂结果为1024,所以找出最小幂index的循环上界为10 */ if(index == 0) for(int i=1; i<=10; i++) { if((long)(Math.pow(k, i)) >= thresholdValue) { index = i; break; } } n = index; //e.g. k = 2且n = 10时, k^n = 1024 > 1000 m = index; //e.g. k = 2且m = 10时, k^m = 1024 > 1000 boolean flag = true; //控制变量:跳出整个循环 while(flag) { ++m; //因为,m>n条件,所以一开始m+1 //每次迭代对于当前m值,没有合适的n值,得到"K尾相等数",则+1 mRemainder = remainder(k, m, thresholdValue); //获取m for(n=index; n<m; ++n) { nRemainder = remainder(k, n, thresholdValue); /* @TODO 找到结果后跳出整个循环 */ if(mRemainder == nRemainder) { flag = false; break; } } } System.out.println("m:\t" + m + "\tn:\t" + n); System.out.println(k + "尾相等数:\t" + (m + n)); } /* @TODO 求得余数 因为幂操作很可能超出int,甚至long的最大可表示值, 所以每步都求其余数,代替求乘积再求余数的做法. */ public static int remainder(long k, int num, int thresholdValue) { int value = 1; for(int i=0; i<num; i++) { value = (int)(value*k); value = value%thresholdValue; //求余数 } return value; } }
---------- 运行Java ----------
输入一个自然数K(K>1):
123454321
m: 26 n: 1
321尾相等数: 27
输出完成 (耗时 0 秒) - 正常终止
方式二(网上的思路翻译成的Java程序)
http://blog.csdn.net/virtualxmars/article/details/2422836
/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All rights reserved. * Author: Jarg Yee <yeshaoting@gmail.com> * http://jarg.iteye.com/ */ import java.util.Scanner; /* * 从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对"K尾相等数".请编一程序,输出M+N值最小的K尾相等数. * K尾相等数 * * 空间耗费较高 * * 抽屉原理:仔细思考后,我们可以注意到,任何数对1000求模只有1000种可能(0~999),所以我们将K^Power 中的Power从1(为什么不是0?因为K^0=1<1000,而我们不考虑小于1000的情况,题解第3点)到1001逐个求值,总有相等的两个数字。 * */ public class KTail { public static void main(String[] args) throws Exception { //由末尾三位数相等可知,余数会出现1000种情况 //因此,设置一个余数数组,用来保存出现的各种余数 //另外,最多1001次循环,必定能找到余数相同的值 final int thresholdValue = 1000; //临界值1000 int[] remainder = new int[thresholdValue]; //初始所有余数值为-1 //将第一些得到对应余数值的幂值设为其余数数组对应值;下次取余数,获得对应的数组不为-1的话(出现余数重复的二个数),则表明找到另一个K尾相等数 initRemainderArray(remainder); System.out.println("输入一个自然数K(K>1):"); Scanner s = new Scanner(System.in); long k = s.nextLong(); //要求输入大于或等于2的整数 int m=0, n=0; //保存一对K尾相等数,其中m>n int value = 1; boolean flag = false; //是否找到满足大于或等于1000的最小幂 if(k >= thresholdValue) { flag = true; k = (int)k%thresholdValue; //若k是很大的整数,则会出现乘积会出现上溢的情况 // 在数论基础知识里曾证明过(M*N)%R = (M%R *N%R)%R // 这样做的原因是避免后面进行乘运算时数据溢出 } for(int i=1; i<=thresholdValue; i++) //迭代thresholdValue+1必定能找到K尾相等数 { value = (int)(value * k); /* @TODO 从满足大于或等于1000的最小幂开始 */ if(flag == false) { if(value >= 1000) { flag = true; } else continue; } value = value%thresholdValue; //每次求余数,防止乘积越界的情况 if(remainder[value] == -1) //表示之前未设置过 { remainder[value] = i; //保存第一次得到此余数的幂值 } else { m = i; n = remainder[value]; break; } } System.out.println("m:\t" + m + "\tn:\t" + n); System.out.println(k + "尾相等数:\t" + (m + n)); } /* @TODO 初始化余数数组 */ public static void initRemainderArray(int[] remainder) { for(int i=0; i<remainder.length; i++) { remainder[i] = -1; } } }
---------- 运行Java ----------
输入一个自然数K(K>1):
123454321
m: 26 n: 1
321尾相等数: 27
输出完成 (耗时 0 秒) - 正常终止
发表评论
-
Java - Convert String to enum
2012-11-17 22:03 1913http://stackoverflow.com/que ... -
[ERROR]Premature end of file
2012-09-28 11:41 3350[ERROR]Premature end of file ... -
测试java.util.Map.Entry
2012-07-18 16:13 1021/** * Copyright (c) 201 ... -
关于eclipse启动出错问题的解决办法
2012-06-09 09:31 1485转自:http://blog.csdn.net/jkpt ... -
Myeclipse中把java代码导成UML类图
2012-05-18 14:53 2371MyEclipse 中选择window,在 Open ... -
[转载]java synchronized详解
2012-05-15 17:18 869http://www.cnblogs.com ... -
[转载]Java 根据 HashMap 的 value 进行排序
2012-05-08 09:58 953转载:http://www.oschina.net/co ... -
JAVA实时屏幕监控
2012-04-29 16:13 3325JAVA实时屏幕监控 说明: 本程序会运 ... -
[JAVA实时屏幕监控]JAVA使用Internet代理设置
2012-04-29 14:50 1387JAVA使用Internet代理设置 描述:首先 ... -
[JAVA实时屏幕监控]JAVA通过注册表获取Internet代理设置
2012-04-29 14:47 2338JAVA通过注册表获取Internet代理设置 ... -
[JAVA实时屏幕监控]JAVA发送邮件
2012-04-29 14:28 2507JAVA发送邮件 描述:利用commons-em ... -
[JAVA实时屏幕监控]JAVA屏幕截图
2012-04-29 14:19 1318JAVA屏幕截图 /** * 产生截图 ... -
[JAVA实时屏幕监控]Java使用代理服务器
2012-04-24 13:36 2491/** * Copyright (c) 2012 T ... -
java.util.ConcurrentModificationException解决办法
2012-04-23 10:47 1583java.util.ConcurrentModi ... -
[转载]java.util.ConcurrentModificationException
2012-04-23 09:20 976java.util.ConcurrentModif ... -
整数转换成字节型数组
2012-04-22 13:16 6017整数转换成字节型数组 描述: 整数(in ... -
java.lang.NoClassDefFoundError: javax/mail/Message解决方法
2012-04-18 10:33 1269缺少activation.jar 和 mail.jar ... -
设置javax.swing.JFrame窗口外观
2012-03-29 15:34 0设置javax.swing.JFrame窗口外 ... -
设置javax.swing.JFrame窗口外观
2012-03-29 15:34 0设置javax.swing.JFrame窗口 ... -
Java图形界面外观包substance.jar
2012-03-29 15:33 0一直以来都认为用Swing做出来的程序 ...
相关推荐
从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000、且它们的末尾三位数相等,则称M和N是一对?K尾相等数?。请编写程序,输出M+N值最小的K尾相等数。
当x接近kπ(k为非零整数)时,条件数趋向无穷大,表明函数在此处对输入变化高度敏感。 3. 递推序列误差分析: - 递推公式 Yun = Yun-1 - 1100√783(n=1,2,...)用于计算Y100。使用近似值√783 ≈ 27.982,通过...
3. **划分为k个相等的子集**:这可能涉及到背包问题或组合优化。递归可以尝试将元素分配到不同的子集中,确保每个子集的和相等,同时满足k的限制。 4. **最小因式分解**:这个问题要求找到一个数的最小因子分解。...
它首先将数组分为两个大致相等的部分,然后根据分割点的位置判断第k小元素应该在哪一部分。通过不断地将数组划分为更小的部分,算法逐渐缩小搜索范围,直到找到第k小元素。 具体实现时,不生成随机数的策略通常是指...
- **二项式系数**:递归地计算组合数C(n, k)时,利用C(n, k) = C(n-1, k-1) + C(n-1, k),基础情况是当k等于0或n时,返回1。 递归虽然在理解上直观,但在实际应用中需要注意其效率问题,尤其是在数据规模较大时。...
4. **循环队列的管理**:队列为空的条件是尾指针与头指针相等,队列满的条件是(尾指针+1)模队列最大长度等于头指针。 5. **二叉树的性质**:高度为h的二叉树至少有h个结点,最多有2^h-1个结点。这是关于二叉树...
), 8名同学中每两个人比赛一场,即k=2,n=8,所以比赛场数为C(8, 2) = 8! / (2! * 6!) = 28场。 2. **比例问题**:第二题中,甲数与乙数的比例为5:3,已知甲数为60,可以设乙数为x,根据比例关系得出5/3 = 60/x,解...
这涉及到概率的基本计算,即符合条件的k值除以总的可能取值数。 3. **命题逻辑**:第13题询问一个原命题为真,逆命题为假的例子。在逻辑中,原命题与逆命题的关系是,原命题真并不意味着其逆命题也真,例如:“所有...
【填空题8】在0.6,0.666,0.6,67%,这五个数中,最大的数是(67%),最小的数是(0.6),相等的数是(0.6)和(0.6)。 【填空题9】一个圆柱体和一个圆锥体等底等高。已知圆锥体体积比圆柱体少14立方厘米,圆柱体体积...
5. 错误,一个数的因数可以与它的倍数相等,例如1的因数和倍数都是1。 6. 正确,3、4、5的任意排列(例如345、354、435、453、534、543)的数字和都是3的倍数,所以它们都是3的倍数。 7. 错误,甲数除以乙数等于15,...
判断二叉树是否相等 反转单链表 单身数字 判断单链表是否为回文链表 从尾到头打印链表 求数组中个数最多的数字 判断单链表是否有环 二分搜索 缺失的数字 包含min函数的栈 合并两个递增排序的链表 连续子序列的最大和...
2. **浮点数运算**:浮点数运算涉及对阶操作,即调整两个数的指数使其相等,以便进行尾数的加减运算。 3. **存储层次结构**:计算机存储系统通常由高速缓存(CACHE)、主存(内存)和辅助存储(外存)组成,形成层次结构...
解析:**假溢出**指的是在顺序循环队列中,即使队列并没有真正满,但由于头指针front和尾指针rear相等,系统误以为队列已经满了的情况。 **解决假溢出的常见方法**: - 使用**哨兵元素**:在队列的末尾预留一个额外...
成反比例关系意味着XY=k(k为常数),X和Y的变化趋势相反,这里选X=4时,Y=1.6,满足反比例关系。 这些知识点涵盖了小学六年级的数学核心概念,包括大数读写、时间计算、比例与比值、分数与百分比的转换、几何图形...
3. **方程的解**:使方程左右两边相等的未知数的值。例如,若x=1是方程2x-a=0的解,意味着当x取1时,方程成立,可以求得a的值。 4. **等式的性质**:等式的性质包括加减同数性质和乘除同数性质。例如,等式的第二...
- **第k层的最大结点数**:第k层的结点数最多为\(2^{k-1}\)个。 - 其中,\(k\)是从1开始计数的。 #### 二分查找 - **查找过程**:通过比较中间元素,将查找区间不断缩小,直至找到目标元素或区间为空。 - **查找A...
- 在生物学示例中,通过两个已知点(尾长与全长的关系)可以建立一次函数关系,从而求出任意尾长对应的全长。 6. **直线的平行与垂直** - 如果两条直线平行,它们的斜率相等,即 k1 = k2。 - 如果两条直线垂直,...
此资源涵盖了操作系统、...判断无序图P中任意两个顶点是否存在距离为K且不含回路的路径的函数可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法来实现。该函数需要维护一个访问数组,以便记录已经访问过的节点。
数乘向量a的k倍可以表示为ka,其中k是标量。数乘的性质包括:(1)(ka)b=k(ab),(2)a(ba)=a(-b)=-a(ba),(3)1a=a。 在几何问题中,向量的运算是解决位置关系和长度计算的关键工具。例如,例1展示了向量的加法在图形中...