摘要: 1.3.30编写一个函数,接受一条链表的首结点作为参数,(破坏性地)将链表反转并返回结果链表的首结点。迭代方式的解答:为了完成这个任务,我们需要记录链表中三个连续的结点:reverse、first和second。在每轮迭代中,我们从原链表中提取结点first并将它插入到逆链表的开头。我们需要一直保持 阅读全文
posted @ 2018-10-25 14:25 修电脑的龙生 阅读(212) 评论(0) 推荐(0)
摘要: 1.3.29用环形链表实现Queue。环形链表也是一条链表,只是没有任何结点的链接为空,且只要链表非空则last.next的值为first。只能使用一个Node类型的实例变量(last)。答:import java.util.Iterator;public class QueueOfCircular 阅读全文
posted @ 2018-10-25 14:24 修电脑的龙生 阅读(511) 评论(2) 推荐(1)
摘要: 1.3.28用递归的方法解答上一道练习。public static int findMax(Node x,int maxValue){ if(x==null) return maxValue; if(maxValue<x.item) maxValue=x.item; return findMax(x 阅读全文
posted @ 2018-10-25 14:23 修电脑的龙生 阅读(192) 评论(0) 推荐(0)
摘要: 1.3.26编写一个方法remove(),接受一条链表和一个字符串key作为参数,删除链表中所有item域为key的结点。答:public insertAfter(Node first,String key){ Node x=new Node(); x.next=first; if(x.next!= 阅读全文
posted @ 2018-10-25 14:22 修电脑的龙生 阅读(193) 评论(0) 推荐(0)
摘要: 1.3.27编写一个max(),接受一条链表的首结点作为参数,返回链表中键最大的节点的值。假设所有键均为正整数,如果链表为空则返回0。public static int max(Node first){ if(first==null) return 0; Node x=first; int maxV 阅读全文
posted @ 2018-10-25 14:22 修电脑的龙生 阅读(193) 评论(0) 推荐(0)
摘要: 1.3.25编写一个方法insertAfter(),接受两个链表结点作为通用数,将第二个结点插入链表并使之成为第一个结点的后续结点(如果两个参数为空则什么也不做)。答:public insertAfter(Node x,Node y){ if(!(x==null || y==null)) y.nex 阅读全文
posted @ 2018-10-25 14:21 修电脑的龙生 阅读(193) 评论(0) 推荐(0)
摘要: 1.3.24编写一个方法removeAfter(),接受一条链表结点作为参数并删除该结点的后续结点(如果参数结点或参数结点的后续结点为空则什么也不做)。答:public removeAfter(Node x){ if(!(x==null || x.next==null)) x.next=x.next 阅读全文
posted @ 2018-10-25 14:20 修电脑的龙生 阅读(287) 评论(0) 推荐(0)
摘要: 1.3.23为什么下面这段代码和上一道题中的代码效果不同?x.next=t;t.next=x.next;答:第二行时x.next指向t,而t.next=x.next,说明t.next提向了t。 阅读全文
posted @ 2018-10-25 14:19 修电脑的龙生 阅读(103) 评论(0) 推荐(0)
摘要: 1.3.22假设x是一条链表中的某个结点,下面这段代码做了什么?t.next=x.next;x.next=t;答:将结点t作为x的后继结点。 阅读全文
posted @ 2018-10-25 14:16 修电脑的龙生 阅读(113) 评论(0) 推荐(0)
摘要: 1.3.21编写一个方法find(),接受一条链表和一个字符串key作为参数。如果链表中的某个结点的item域的值为key,则方法返回true,否则返回false。答:public boolean find(Node first,String key){ boolean result=false; 阅读全文
posted @ 2018-10-25 14:15 修电脑的龙生 阅读(219) 评论(0) 推荐(0)
摘要: 1.3.20编写一个方法delete(),接受一个int参数k,删除链表的第k个元素(如果它存在的话)。答:public void delete(int k){ Node x=first; int i=1; while(true) { if(i==k-1) { x=x.next; x.next=x. 阅读全文
posted @ 2018-10-25 14:13 修电脑的龙生 阅读(199) 评论(0) 推荐(0)
摘要: 1.3.19给出一段代码,删除链表的尾结点,其中链表的首结点为first.答:单链表的实现方式:Node x=first;while(x.next!=last) x=x.next;last=x;last.next=null; 阅读全文
posted @ 2018-10-25 14:11 修电脑的龙生 阅读(328) 评论(0) 推荐(0)
摘要: 1.3.18假设x是一条链表的某个结点且不是尾结点。下面这条语句的效果是什么?x.next=x.next.next;答:删除x的后续结点。评:上面是书上的答案。如果是单链表x的后续结点的next域并没有置为null,说明x的后续结点并未完全与链表脱离关系。如果是双向链表在上述基础上还存在x.next 阅读全文
posted @ 2018-10-25 14:10 修电脑的龙生 阅读(157) 评论(0) 推荐(0)
摘要: 1.3.17为Transaction类完成练习1.3.16。 答:public static Transaction[] readTransactions(String name)import java.util.Date;public class Transaction{ private fina 阅读全文
posted @ 2018-10-25 14:09 修电脑的龙生 阅读(207) 评论(0) 推荐(0)
摘要: 1.3.16使用1.3.1.5节中的readInts()作为模板为Date编写一个静态方法readDates(),从标准输入中读取由练习1.2.19的表格所指定的格式的多个日期并返回一个它们的数组。答:public static SmartDate[] readDates(String name)p 阅读全文
posted @ 2018-10-25 14:08 修电脑的龙生 阅读(266) 评论(0) 推荐(0)
摘要: 1.3.15编写一个Queue的用例,接受一个命令行参数k并打印出标准输入中的倒数第k个字符串(假设标准输入中至少有k个字符串)。答:public class test{ public static void main(String[] args) { Queue<String> q=new Que 阅读全文
posted @ 2018-10-25 14:04 修电脑的龙生 阅读(297) 评论(0) 推荐(0)
摘要: 1.3.14编写一个类ResizingArrayQueueOfStrings,使用定长数组实现队列的抽象,然后扩展实现,使用调整数的方法突破大小的限制。答:用例数据:0123456789入队,出队时的效果:public class ResizingArrayQueueOfString{ privat 阅读全文
posted @ 2018-10-25 14:03 修电脑的龙生 阅读(279) 评论(0) 推荐(0)
摘要: 1.3.13假设某个用例程序会进行一系列入列和出列的混合队列操作。入列操作会将整数0到9按顺序插入队列;出列操作会打印出返回值。下面哪种序列是不可能产生的?a. 0 1 2 3 4 5 6 7 8 9b. 4 6 8 7 5 3 2 9 0 1c. 2 5 6 7 4 8 9 3 1 0d. 4 3 阅读全文
posted @ 2018-10-25 14:02 修电脑的龙生 阅读(186) 评论(0) 推荐(0)
摘要: 1.3.12编写一个可迭代的Stack用例,它含有一个静态的copy()方法,接受一个字符串的栈作为参数,并返回该栈的一个副本。注意:这种能是迭代器价值的一个重要体现,因为有了它我们无需改变基本API就能够实现这种功能。答:public class test{ public static void 阅读全文
posted @ 2018-10-25 14:00 修电脑的龙生 阅读(362) 评论(0) 推荐(0)
摘要: 1.3.11编写一段程序EvaluatePostfix,从标准输入中得到一个后序表达式,求值并打印结(将上一程序中得到的输出用管道传递给这一段各程序可以得到和Evaluate相同的行为)。答: public class EvaluatePostfix{ public static void main 阅读全文
posted @ 2018-10-25 13:53 修电脑的龙生 阅读(228) 评论(0) 推荐(0)
摘要: 1.3.10编写一个过滤器InfixToPostfix,将算术表达式由中序表达式转为后序表达式。 答:本次做这个题时离上次做这个题有一个半月了,已经忘记了当时的算法。经过两个小时的研究(远低于第一次的研究时间),得出的算法与上次的算法几乎相同,个别细节有差别,而这个细节正是上一个版本的错误之处。本次 阅读全文
posted @ 2018-10-25 13:48 修电脑的龙生 阅读(410) 评论(0) 推荐(0)
摘要: 1.3.9编写一段程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:1+2)*3-4)*5-6)))你的程序应该输出:((1+2)*((3-4)*(5-6)))答:与上一次实现时没有本质区别,都是用两个栈,数据从左到右或是从右到左移动。实现方面略有差别。粗算 阅读全文
posted @ 2018-10-25 13:47 修电脑的龙生 阅读(639) 评论(0) 推荐(0)
摘要: 1.3.8给定以下输入,给出DoublingStackOfStrings的数组的内容和大小。答:内容:it 大小:2 阅读全文
posted @ 2018-10-25 13:46 修电脑的龙生 阅读(231) 评论(0) 推荐(0)
摘要: 1.3.6下面这段代码对队列q进行了什么操作?Stack<String> stack=new Stack<String>(); while(!StdIn.isEmpty()) q.enqueue(StdIn.readString()); while(!q.isEmpty()) stack.push( 阅读全文
posted @ 2018-10-25 13:45 修电脑的龙生 阅读(225) 评论(0) 推荐(0)
摘要: 1.3.7为Stack添加一个方法peek(),返回栈中最近添加的元素(而不弹出它)。答: public Item peek() { Item item=first.item; return item; } 阅读全文
posted @ 2018-10-25 13:45 修电脑的龙生 阅读(259) 评论(0) 推荐(0)
摘要: 1.3.4编写现代一个Stack的用例Parentheses,从标准输入中读取一个文本流并使用栈判定其中的括号是否配对完整。例如,对于[()]{}{[()()]()}程序应该打印true,对于[(])则打印false。答:上一次发布的code没有考虑栈为空时读入右括号的情形。算法如下:置结果为tru 阅读全文
posted @ 2018-10-25 13:44 修电脑的龙生 阅读(333) 评论(0) 推荐(0)
摘要: 1.3.5当N为50时下面这段代码会打印什么?从较高的抽象层次描述给定正整数N时这段代码的行为。Stack<Integer> stack =new Stack<Integer>(); while(N>0) { stack.push(N%2); N=N/2; } // for(int d:stack) 阅读全文
posted @ 2018-10-25 13:44 修电脑的龙生 阅读(168) 评论(0) 推荐(0)
摘要: 1.3.3假设某个用例程序会进行一系列入栈和出栈的混合操作。入栈操作会将整数0到9按顺序压入栈;出栈操作会打印出返回值。下面哪种序列是不可能产生的?a. 4 3 2 1 0 9 8 7 6 5b. 4 6 8 7 5 3 2 9 0 1c. 2 5 6 7 4 8 9 3 1 0d. 4 3 2 1 阅读全文
posted @ 2018-10-25 13:43 修电脑的龙生 阅读(363) 评论(0) 推荐(1)
摘要: 1.3.1为FixedCapacityStackOfStrings添加一个方法isFull() public boolean isFull() {return N==a.length;}完整Code:public class FixedCapacityStackOfStrings{ private 阅读全文
posted @ 2018-10-25 13:42 修电脑的龙生 阅读(280) 评论(0) 推荐(0)
摘要: 1.3.2给定以下输入,java Stack的输出是什么?it was - the best -of times - - - it was - the - -答:was bet times of the was the it 阅读全文
posted @ 2018-10-25 13:42 修电脑的龙生 阅读(163) 评论(0) 推荐(0)
摘要: import java.util.Iterator;public class Queue<Item> implements Iterable<Item>{ private int N; private Node first; private Node last; private class Node 阅读全文
posted @ 2018-10-25 13:41 修电脑的龙生 阅读(107) 评论(0) 推荐(0)
摘要: import java.util.Iterator;public class Stack<Item> implements Iterable<Item>{ private int N; private Node first; private class Node { Item item; Node 阅读全文
posted @ 2018-10-25 13:40 修电脑的龙生 阅读(115) 评论(0) 推荐(0)
摘要: import java.util.Iterator;public class Bag<Item> implements Iterable<Item>{ private Node first; private int N; private class Node { Item item; Node ne 阅读全文
posted @ 2018-10-25 13:39 修电脑的龙生 阅读(194) 评论(0) 推荐(0)
摘要: public class Queue<Item>{ private int N; private Node first; private Node last; private class Node { Item item; Node next; } public boolean isEmpty() 阅读全文
posted @ 2018-10-25 13:38 修电脑的龙生 阅读(114) 评论(0) 推荐(0)
摘要: import java.util.Iterator;public class ResizingArrayStack<Item> implements Iterable<Item>{ private Item[] a=(Item[]) new Object[1]; private int N=0; p 阅读全文
posted @ 2018-10-25 13:37 修电脑的龙生 阅读(99) 评论(0) 推荐(0)
摘要: public class Stack<Item>{ private int N; private Node first; private class Node { Item item; Node next; } public boolean isEmpty() {return N==0;} publ 阅读全文
posted @ 2018-10-25 13:37 修电脑的龙生 阅读(123) 评论(0) 推荐(0)
摘要: public class FixedCapacityStack<Item>{ private Item[] a; private int N; public FixedCapacityStack(int cap) {a=(Item[]) new Object[cap];} public void p 阅读全文
posted @ 2018-10-25 13:36 修电脑的龙生 阅读(108) 评论(0) 推荐(0)
摘要: public class FixedCapacityStackOfStrings{ private String[] a; private int N; public FixedCapacityStackOfStrings(int cap) {a=new String[cap];} public v 阅读全文
posted @ 2018-10-25 13:35 修电脑的龙生 阅读(112) 评论(0) 推荐(0)
摘要: public class FixedCapacityStack<Item>{ private Item[] a; private int N; public FixedCapacityStack(int cap) {a=(Item[]) new Object[cap];} public void p 阅读全文
posted @ 2018-10-25 13:35 修电脑的龙生 阅读(155) 评论(0) 推荐(0)
摘要: public class Evaluate{ public static void main(String[] args) { Stack<String> ops=new Stack<String>(); Stack<Double> vals=new Stack<Double>(); while(! 阅读全文
posted @ 2018-10-25 13:34 修电脑的龙生 阅读(313) 评论(0) 推荐(0)
摘要: public class test{ public static void main(String[] args) { int T=Integer.parseInt(args[0]); VisualAccumulator a=new VisualAccumulator(T,1.0); for (in 阅读全文
posted @ 2018-10-25 11:54 修电脑的龙生 阅读(181) 评论(0) 推荐(0)
摘要: 1.2String类型基本方法与属性 public class Test{ public static void main(String[] args) { String s="000111222333"; StdOut.printf("s is:%s\n",s); // StdOut.printf 阅读全文
posted @ 2018-10-25 11:53 修电脑的龙生 阅读(162) 评论(0) 推荐(0)
摘要: 1.2节(非习题)几何对象中的一个2D用例public class Test{ public static void main(String[] args) { double xlo=Double.parseDouble(args[0]); double xhi=Double.parseDouble 阅读全文
posted @ 2018-10-25 11:52 修电脑的龙生 阅读(135) 评论(0) 推荐(0)
摘要: 1.2.19字符串解析。为你在练习1.2.13中实现的Date和Transaction类型编写能够解析字符串数据的构造函数。它接受一个String参数指定的初始值,格式如表1.2.20所示:Partial solution:public Date(String date){String[] fiel 阅读全文
posted @ 2018-10-25 11:51 修电脑的龙生 阅读(165) 评论(0) 推荐(0)
摘要: 1.2.18累加器的方差。以下代码为Accumulator类添加了var()和stddev()方法,它们计算了addDatavalue()方法的参数的方差和标准差,验证这段代码。public class Accumulator{ private double m; private double s; 阅读全文
posted @ 2018-10-25 11:50 修电脑的龙生 阅读(322) 评论(0) 推荐(0)
摘要: 1.2.17有理数实现的健壮性。在Rational(请见练习1.2.16)的开发中使用断言来防止溢出。答:在命令行使用:java -ea 文件名 启用断言功能。(估计是单次启用断言)public class Rational{ private final long myNumerator; priv 阅读全文
posted @ 2018-10-25 11:49 修电脑的龙生 阅读(216) 评论(0) 推荐(0)
摘要: 1.2.16有理数。为有理数实现一个可变数据类型Rational,支持加减乘除操作。无需测试溢出(请见练习1.2.17),只需使用两个long型实例变量表示分子和分母来控制溢出的可能性。使用欧几里得算法来保证分子和分母没有公因子。编写一个测试用例检测你实现的所有方法。public class Rat 阅读全文
posted @ 2018-10-25 11:47 修电脑的龙生 阅读(193) 评论(0) 推荐(0)
摘要: 1.2.15文件输入。基于String的split()的方法实现In中的静态方法readInts()。答:public static in[] readInts(String name){ In in=new In(name); String input=in.readAll(); String[] 阅读全文
posted @ 2018-10-25 11:46 修电脑的龙生 阅读(413) 评论(0) 推荐(0)
摘要: 1.2.13用我们对Date的实现(请见表1.2.12)作为模板实现Transaction类型。答:code:import java.util.Date;public class Transaction{ private final String myWho; private final Date 阅读全文
posted @ 2018-10-25 11:45 修电脑的龙生 阅读(239) 评论(0) 推荐(0)
摘要: 1.2.14用我们对Date中的equals()方法的实现(请见1.2.5.8节中的Date类代码框)作为模板,实现Transaction中的equals()方法。答:Code:import java.util.Date;public class Transaction{ private final 阅读全文
posted @ 2018-10-25 11:45 修电脑的龙生 阅读(150) 评论(0) 推荐(0)
摘要: 1.2.12为SmartDate添加一个方法dayOfTheWeek(),为日期中每周的日返回Monday、Tuesday、Wednesday,Thursday,Friday,Saturday或Sunday中的适当值。你可以假定时间是21世纪。答:Code:public class SmartDat 阅读全文
posted @ 2018-10-25 11:43 修电脑的龙生 阅读(392) 评论(0) 推荐(0)
摘要: 1.2.11根据Date的API实现一个SmartDate类型,在日期非法时抛出一个异常。答:参考资料:月份中的二月是28天还是29天,需看年份是否为闰年,闰年定义为:年份能被400整除的是闰年,或者年份能被4整除但不能被100整除的是闰年。Code:public class SmartDate{ 阅读全文
posted @ 2018-10-25 11:42 修电脑的龙生 阅读(356) 评论(0) 推荐(0)
摘要: 1.2.10编写一个类VisualCounter,支持加一和减一操作。它的构造函数接受两个参数N和max,其中N指定了操作的最大次数,max指定了计数器的最大绝对值。作为副作用,用图像显示每次计器变化后的值。答:Draw Point时操作次数作为X坐标,计数器值作为Y坐标。public class 阅读全文
posted @ 2018-10-25 11:40 修电脑的龙生 阅读(268) 评论(0) 推荐(0)
摘要: 1.2.9修改BinarySearch(请见1.1.10.1节中的二分查找代码),使用Counter统计在有查找中被检查的键的总数并在查找全部结束后打印该值。提示:在main()中创建一个Counter对象并将它作为参数传递给rank()。答:BinarySearch Code:import jav 阅读全文
posted @ 2018-10-25 11:39 修电脑的龙生 阅读(262) 评论(0) 推荐(0)
摘要: 1.2.8设a[]和b[]均为长数百万的整形数组。以下代码的作用是什么?有效吗?int[] t=a;a=b;b=t;答:这段代码会将它们交换。它的效率不可能再高了,因为它复制的是引用而不需要复制数百万个元素。 阅读全文
posted @ 2018-10-25 11:38 修电脑的龙生 阅读(128) 评论(0) 推荐(0)
摘要: 1.2.6如果字符串s中的字符循环移动任意位置之后能够得到另一个字t,那么s就被称为t的回环变位(circular rotation)。例如,ACTGACG就是TGACGAC的一个回环变位,反之亦然。判定这个条件在基因组序列的研究中是很重要的。编写一个程序检查两个给定的字符串s和t是否互为回环变位。 阅读全文
posted @ 2018-10-25 11:37 修电脑的龙生 阅读(247) 评论(0) 推荐(0)
摘要: 1.2.7以下递归函数的返回值是什么?public static String mystery(String s){ int N=s.length(); if (N<=1) return s; String a=s.substring(0,N/2); String b=s.substring(N/2 阅读全文
posted @ 2018-10-25 11:37 修电脑的龙生 阅读(119) 评论(0) 推荐(0)
摘要: 1.2.5以下这段代码会打印出什么?String s="Hello World";s.toUpperCase();s.subString(6,11);StdOut.println(s);答:"Hello World"。String对象是不可变的--所有字符串方法都会返回一个新的String对象(但它 阅读全文
posted @ 2018-10-25 11:36 修电脑的龙生 阅读(117) 评论(0) 推荐(0)
摘要: 1.2.3编写一个Interval2D用例,从命令行接受参数N、min和max。生成N个随机的2D间隔,其宽和高均匀地分布在单位正方形中的min和max之间。用StdDraw画出它们并打印出相关的间隔对的数量以及有包含关系的间隔对数量。解:相交是两个矩形区域有共点,包含是指一个矩形在一个矩形内,包含 阅读全文
posted @ 2018-10-25 11:35 修电脑的龙生 阅读(381) 评论(0) 推荐(0)
摘要: 1.2.4以下这段代码会打印出什么?String string1="hello";String string2=string1;string1="world";StdOut.println(string1);StdOut.println(string2);解:worldhello 阅读全文
posted @ 2018-10-25 11:35 修电脑的龙生 阅读(89) 评论(0) 推荐(0)
摘要: 1.2.2编写一个Interval1D的用例,从命令行接受一个整数N。从标准输入中读取N个间隔(每个间隔由一对double值定义)并打印出所有相交的间隔对。 解:public class Test2{ public static void main(String[] args) { int N=In 阅读全文
posted @ 2018-10-25 11:34 修电脑的龙生 阅读(460) 评论(0) 推荐(0)
摘要: 1.2.1编写一个Point2D的用例,从命令行接受一个整数N。在单位正方形中生成N个随机点,然后计算两点之间的最近距离。解:采用分治法。参考资料《算法导论》中文版第三版。代码实现过程中不太好处理的地方是:为了在Y'数组中只检查后续7个点而又不在递归中对Y数组进行排序的部分,这就需要确保从排序好的Y 阅读全文
posted @ 2018-10-25 11:33 修电脑的龙生 阅读(512) 评论(0) 推荐(0)
摘要: 1.2.1编写一个Point2D的用例,从命令行接受一个整数N。在单位正方形中生成N个随机点,然后计算两点之间的最近距离。解:public class Test{ public static void main(String[] args) { int N=Integer.parseInt(args 阅读全文
posted @ 2018-10-25 11:32 修电脑的龙生 阅读(513) 评论(0) 推荐(1)
摘要: 1.1.39随机匹配。编写一个使用BinarySearch的程序,它从命令行接受一个整型参数T,并会分别针对N=10^3、10^4、10^5和10^6将以下实验运行T遍:生成两个大小为N的随机6位正整数数组并找出同时存在于两个数组中的整数的数量。打印一个表格,对于每个N,给出T次实验中该数量的平均值 阅读全文
posted @ 2018-10-25 11:30 修电脑的龙生 阅读(237) 评论(0) 推荐(0)
摘要: 1.1.38二分查找与暴力查找。根据1.1.10.4节给出的暴力查找法编写一个程序BruteForceSearch,在你的计算机上比较它和BinarySearch处理largeW.txt和largeT.txt所需的时间。解:暴力查找约用时:2371秒二分查找约用时: 17秒//暴力查找代码impor 阅读全文
posted @ 2018-10-25 11:29 修电脑的龙生 阅读(221) 评论(0) 推荐(0)
摘要: 1.1.37糟糕的打乱。假设在我们的乱序代码中你选择的是一个0到N-1而非i到N-1之间的随机整数。证明得到的结果并非均匀地分布在N!种可能性之间。用上一题中的测试检验这个版本。public class ShuffleTest{ public static void main(String[] ar 阅读全文
posted @ 2018-10-25 11:28 修电脑的龙生 阅读(272) 评论(0) 推荐(0)
摘要: 1.1.36乱序检查。通过实验检查表1.1.10中乱序代码是否能够产生预期的效果。编写一个程序ShuffleTest,接受命令行参数M和N,将大小为M的数组打乱N次且每次打乱之前都将数组重新初始化为a[i]=i.打印一个MXM的表格,对于所有的列j,行i表示的是i在打乱后落到j的位置的次数。数组中的 阅读全文
posted @ 2018-10-25 11:27 修电脑的龙生 阅读(258) 评论(0) 推荐(0)
摘要: 1.1.34过滤。以下哪些任务需要(在数组中,比如)保存标准输入中所有值?哪些可以被实现为一个过滤器且仅使用固定数量的变量和因定大小的数组(和N无关)?在每个问题中,输入都来自于标准输入且含有N个0到1的实数。1)打印出最大和最小的数 一个变量max保存最大数、一个变量min保存最小数、一个变量cu 阅读全文
posted @ 2018-10-25 11:26 修电脑的龙生 阅读(196) 评论(0) 推荐(0)
摘要: 1.1.35模拟投骰子。以下代码能够计算每两个骰子之和的准确概率分布:public class Test{ public static void main(String[] args) { int SIDES=6; double[] dist=new double[2*SIDES+1]; for ( 阅读全文
posted @ 2018-10-25 11:26 修电脑的龙生 阅读(229) 评论(0) 推荐(0)
摘要: 1.3.33矩阵库。编写一个Matri库并实现以下API:public class Matrix static double dot(double[] x,double[] y) 向量点乘 static double[][] mult(double[][] a,double[][] b) 矩阵和矩阵 阅读全文
posted @ 2018-10-25 11:25 修电脑的龙生 阅读(203) 评论(0) 推荐(0)
摘要: 1.1.32直方图。假设标准输入流中含有一系列的double值。编写一段程序,从命令行接受一个整数N和两个double值l和r。将(l,r)均分为N段并使用StrDraw画出输入流中的值落入每段的数量的直方图。解决这个问题的思路是:1.创建一个二维数组,其中第一维用来存储 (r-l)/N等分段的边界 阅读全文
posted @ 2018-10-25 11:24 修电脑的龙生 阅读(218) 评论(0) 推荐(0)
摘要: 1.3.31随机连接。编写一段程序,从命令行接受一个整数N和double值p(0到1之间)作为参数,在一个圆上画出大小为0.05且间距相等的N个点,然后将每对点按照概率p用灰线连接。public class Test{ public static void main(String[] args) { 阅读全文
posted @ 2018-10-25 11:22 修电脑的龙生 阅读(287) 评论(0) 推荐(1)
摘要: 1.1.30数组练习。编写一段程序,创建一个N*N的布尔数组a[][]。其中当i和j互质时(没有相同的因子),a[i][j]为true,否则为false。public class Test{ public static void main(String[] args) { int N=Integer 阅读全文
posted @ 2018-10-25 11:21 修电脑的龙生 阅读(228) 评论(0) 推荐(0)
摘要: 1.1.28(原问题)删除重复元素。修改BinarySearch类中的测试用例来删去排序之后白名单中所有重复元素。对问题的调整:标记一维数组中非递减有序整数中重复的数。设有序数>=0。这个问题可以有两种理解:a)每个数只出现一次,例如:1,2,2,3,4,5 去重后得到:1,2,3,4,5b)重复的 阅读全文
posted @ 2018-10-25 11:20 修电脑的龙生 阅读(237) 评论(0) 推荐(0)
摘要: 1.1.29等值键。为BinarySearch类添加一个静态方法rank(),它接受一个键和一个整型有序数组(可能存在重复键)作为参数并返回数组中小于该键的元素数量,以及一个类似的方法count()来返回数组中等于该键的元素的数量。注意:如果i和j分别是rank(key,a)和count(key,a 阅读全文
posted @ 2018-10-25 11:20 修电脑的龙生 阅读(188) 评论(0) 推荐(0)
摘要: 1.1.27二项分布。估计用以下代码计算binomial(100,50,0.25)将会产生的递归调用次数:public static double binomial(int N,int k,double p){ if (N==0 && k==0) return 1.0; if (N<0 || k<0 阅读全文
posted @ 2018-10-25 11:18 修电脑的龙生 阅读(456) 评论(1) 推荐(0)
摘要: 1.1.25使用数学归纳法证明欧几里得算法能够计算任意一对非负整数p和q的最大公约数。 1) 基础步骤:求证gcd(p,q)=gcd(q,r) 证:令p=a*q+r,其中p、a、q、r均为非负整数。 设整数d|p、d|q,则d|(p-a*q),得p与q的公约数和q与r的公约数相同。 设整数d|q、d 阅读全文
posted @ 2018-10-25 11:16 修电脑的龙生 阅读(1484) 评论(0) 推荐(0)
摘要: 1.1.26将三个数排序。假设a、b、c和t都是同一种原始数字类型的变量。证明以下代码能够将a、b、c按照升序排列:if(a>b){t=a:a=b;b=c}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}证:第一行代码确保了 a<=b,第二行代码确保了a<=c,那 阅读全文
posted @ 2018-10-25 11:16 修电脑的龙生 阅读(196) 评论(0) 推荐(0)
摘要: 1.1.24给出使用欧几里得算法105和24的最大公约数的过程中得到的一系列p和q的值。扩展算法中的代码得到一个程序Euclid,从命令行接受两个参数,计算它们的最大公约数并打印出每次调用递归方法时的两个参数。使用你的程序计算1 111 111和1 234 567的最大公约数。public clas 阅读全文
posted @ 2018-10-25 11:15 修电脑的龙生 阅读(258) 评论(0) 推荐(0)
摘要: 1.1.23为BinarySearch的测试用例添加一个参数:+打印出标准输入中不在白名单上的值;-,则打印出标准输入中在白名单上的值。import java.util.Arrays;public class Test{ public static int rank(int key,int[] a) 阅读全文
posted @ 2018-10-25 11:14 修电脑的龙生 阅读(257) 评论(0) 推荐(0)
摘要: 1.1.22使用1.1.64节中的rank()递归方法重新实现BinaraySearch并跟踪该方法的调用。每当该方法被调用时,打印出它的参数lo和hi并接照递归的深度缩进。提示:为递归方法添加一个参数来保存递归的深度。import java.util.Arrays;public class Tes 阅读全文
posted @ 2018-10-25 11:13 修电脑的龙生 阅读(204) 评论(0) 推荐(0)
摘要: 1.1.21编写一段程序,从标准输入按行读取数据,其中每行都包含一个名字和两个整数。然后用printf()打印一张表格,每行的若干列数据包括名字、两个整数和第一个整数除以第二个整数的结果,粗确到小数点后三位。可以用这种程序将棒球球手的击球命中率或者学生的考试分数制成表格。public class T 阅读全文
posted @ 2018-10-25 11:12 修电脑的龙生 阅读(243) 评论(0) 推荐(0)
摘要: 1.1.20编写一个递归的静态方法计算ln(N!)的值。答:public class Test{ public static void main(String[] args) { double n=Double.parseDouble(args[0]); StdOut.printf("ln(" +D 阅读全文
posted @ 2018-10-25 11:11 修电脑的龙生 阅读(702) 评论(0) 推荐(0)
摘要: 1.1.18请看以下递归函数:public static int mystery(int a,int b){ if (b==0) return 0; if (b%2==0) return mysetery(a+a,b/2); return mystery(a+a,b/2)+a;}mystery(2, 阅读全文
posted @ 2018-10-25 11:09 修电脑的龙生 阅读(307) 评论(0) 推荐(0)
摘要: 1.1.19在计算机上运行以下程序:public class Fibonacci{ public static long F(int N) { if (N==0) return 0; if (N==1) return 1; return F(N-1)+F(N-2); } public static 阅读全文
posted @ 2018-10-25 11:09 修电脑的龙生 阅读(204) 评论(0) 推荐(0)
摘要: 1.1.17找出以下递归函数的问题:public static class String exR2(int n){ String s=exR2(n-3)+n+exR2(n-2)+n; if (n<=0) return ""; return s;}答:return 语句永远不会执行,递归陷入无限循环。 阅读全文
posted @ 2018-10-25 11:07 修电脑的龙生 阅读(148) 评论(0) 推荐(0)
摘要: 1.1.16给出exR1(6)的返回值: public static String exR1(int n){ if(n<=0) return ""; return exR1(n-3)+n+exR1(n-2)+n;} 阅读全文
posted @ 2018-10-25 11:06 修电脑的龙生 阅读(367) 评论(0) 推荐(0)
摘要: 1.1.15编写一个静态方法histogram(),接受一个整型数组a[]和一个整数M为参数并返回一个大小为M的数组,其中第i个元素的值为整数i在参数数组中出现的次数。如果a[]中的值均在0到M-1之间,返回数组中所有元素之和应该和a.length相等。import java.util.Arrays 阅读全文
posted @ 2018-10-25 11:05 修电脑的龙生 阅读(397) 评论(0) 推荐(0)
摘要: 1.1.14编写一个静态方法lg(),接受一个整型参数N,返回不大于log2N的最大整数。不要使用Math库。答:public class Test{ public static void main(String[] args) { int N=Integer.parseInt(args[0]); 阅读全文
posted @ 2018-10-25 11:04 修电脑的龙生 阅读(249) 评论(0) 推荐(0)
摘要: 1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)。public class Test{ public static void main(String[] args) { //初始化 int M=Integer.parseInt(args[0]); int N=Integer 阅读全文
posted @ 2018-10-25 11:03 修电脑的龙生 阅读(436) 评论(0) 推荐(0)
摘要: 1.1.12以下代码段会打印出什么结果?public class Test{ public static void main(String[] args) { int[] a=new int[10]; for (int i=0;i<10;i++) a[i]=9-i; for (int i=0;i<1 阅读全文
posted @ 2018-10-25 11:02 修电脑的龙生 阅读(142) 评论(0) 推荐(0)
摘要: 1.1.11编写一段代码,打印出一个二维布尔数组的内容。其中,使用*表示真,空格表示假。打印出行号和列号。答:public class Test{ public static void main(String[] args) { //初始化数组,行列和为偶数时true,奇数时为false。 int 阅读全文
posted @ 2018-10-25 11:01 修电脑的龙生 阅读(728) 评论(2) 推荐(0)
摘要: 1.1.9编写一段代码,将一个正整数N用二进制表示并转换为一个String类型的值s。解答:Java有一个内置方法Integer.toBinaryString(N)专门完成这个任务,但该题的目的就是给出这个方法的基他实现方法。下面就是一个特别简洁的答案:String s="";for (int n= 阅读全文
posted @ 2018-10-25 10:59 修电脑的龙生 阅读(150) 评论(0) 推荐(0)
摘要: 1.18下列语句会打印出什么结果?给出解释。a.System.out.println('b');b.System.out.println('b'+'c');c.System.out.println((char)('a'+4));答:a)b,显示char字符。b)197,'b'的ASCII码是98,' 阅读全文
posted @ 2018-10-25 10:58 修电脑的龙生 阅读(202) 评论(0) 推荐(0)
摘要: 1.1.7分别给出以下代码段打印的值:a.double t=9.0; while (Math.abs(t-9.0/t)>.001) t=(9.0/t+t)/2.0; StdOut.printf("%.5f\n",t);b. int sum=0; for (int i=1;i<1000;i++) fo 阅读全文
posted @ 2018-10-25 10:57 修电脑的龙生 阅读(190) 评论(0) 推荐(0)
摘要: 1.1.6下面这段程序会打印出什么? int f=0; int g=1; for (int i=0;i<=15;i++) { StdOut.println(f); f=f+g; g=f-g; }答:斐波那契数列前16项。 阅读全文
posted @ 2018-10-25 10:56 修电脑的龙生 阅读(140) 评论(0) 推荐(0)
摘要: 1.1.5编写一段程序,如果double类型的变量x和y都严格位于0与1之间则打印true,否则打印false。答:public class Test{ public static void main(String[] args) { double x=Double.parseDouble(args 阅读全文
posted @ 2018-10-25 10:54 修电脑的龙生 阅读(232) 评论(0) 推荐(0)
摘要: 1.1.4下列语句各有什么问题(如果有的话)?a.if (a>b) then c=0;b.if a>b {c=0;}c.if (a>b) c=0;d.if (a>b) c=0 else b=0;答:a) java中的if 分支语法中没有 then 这个关键字。b) if后面接的条件表达式需要用()括 阅读全文
posted @ 2018-10-25 10:53 修电脑的龙生 阅读(143) 评论(0) 推荐(0)
摘要: 1.1.3编写一个程序,从命令行得到三个整参数。如果它们都相等则打印equal,否则打印not equal。答:public class Test{ public static void main(String[] args) { if ( Integer.parseInt(args[0])==In 阅读全文
posted @ 2018-10-25 10:52 修电脑的龙生 阅读(133) 评论(0) 推荐(0)
摘要: 1.1.2给出以下表达式的类型和值a.(1+2.236)/2b.1+2+3+4.0c.4.1>=4d.1+2+"3" 答:a)double 1.618b)double 10.0c)boolean trued)String "33" 阅读全文
posted @ 2018-10-25 10:51 修电脑的龙生 阅读(162) 评论(0) 推荐(0)