反转(Inversions)

2017年10月31日

在数组中A类,术语反转指出现故障的项目数量;每个<j个对于其中A类[j个] <A类[]计数为单个反转。例如,数组[1 4 3 2 5]有三个反转:(4,3)、(4,2)和(3,2)。反转是阵列无序的度量:有序阵列没有反转,而反转阵列具有最大值n个(n个−1)/2个反转数。

您的任务是编写计算数组中反转数的程序,并对其进行枚举。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

第一只蚂蚁

2017年10月27日

这个首要的 蚂蚁(A293689型)是一种顽固的动物,它会根据以下程序导航整数并将其除掉,直到只剩下素数:

无限数组A类初始化为包含所有大于1:[2,3,4,5,6,…]的整数。

第页是蚂蚁在数组中的位置。最初第页=0,所以蚂蚁在A类[0] = 2.

每转一圈,蚂蚁的动作如下:

  • 如果A类[第页]是prime,将蚂蚁向前移动一个位置,所以第页第页+ 1.
  • 否则(如果A类[第页]复合),让q个是其大于1的最小除数。更换A类[第页]带有A类[第页] ÷q个.更换A类[第页−1]带A类[第页−1]+q个.将蚂蚁向后移动一个位置,这样第页第页− 1.

你的任务是编写一个程序,计算质数蚂蚁的位置n个转动;例如,在47圈后,主要蚂蚁将处于第页= 9. 完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

等差数列

2017年10月24日

我今天继续处理积压的作业问题:

给定一个至少由三个按升序排序的不同正整数组成的数组,找出构成算术级数的所有数组元素的三元组,以便第一个元素和第二个元素之间的差异与第二个和第三个元素之间差异相同。例如,在数组(1 2 3 4 6 7 9)中,算术数列中有五个三元组:(2 2 3)、(2 3 4)、(4 6)、(1 4 7)和3 6 9)。

你的任务是编写一个程序,找出数组中的所有算术级数;对于额外的学分,对几何级数做同样的事情,其中第一个元素与第二个元素以及第二个与第三个元素的比率是相同的。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

数组的部分乘积

2017年10月20日

我们今天还有一个作业问题:

将数组中的每个元素替换为数组中其他元素的乘积,而不使用除法运算符。例如,给定数组(5 3 4 2 6 8),所需输出为(1152 1920 1440 2880 960 720)。

您的任务是编写一个程序,用数组中每个其他元素的乘积替换数组中的每个元素,而不执行除法。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

零和一

2017年10月17日

零和一

这是某人的家庭作业问题:

给定一个只包含零和一的数组,找出零的索引,如果将其转换为一,则会生成最长的一序列。例如,给定数组[1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1],替换索引10处的零(从0开始计数)形成一个9个一的序列。

您的任务是编写一个程序,确定在何处用1替换零以生成最大长度的子序列。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

零和子阵列

2017年10月13日

这个有趣的小问题来自职业杯:

给定一个只包含元素-1和1的数组,求和为零的子数组的数量。例如,给定数组[-1,1,-1,1],有四个子数组的总和为零:[-1,1][1],[1,-1],[-1,1'和[-1,1,1]。

您的任务是计算-1/1数组的子数组,其和为零。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

第280天

2017年10月9日

帕特·巴鲁(Pat Ballew)是一位退休数学老师,他写了一个博客数学中的今天这给了我们一天又一天的数学史。这个博客很奇怪,很古怪,毫无疑问很有趣。10月7日,Ballew写道:

一年中的第280天…。前280个连续素数的和mod 280是素数。

由于我喜欢玩素数,这引起了我的注意,我很快就去确定一年中有多少这样的日子。

您的任务是确定一年中有多少天在n个第天第一次的总和n个素数,modn个,是质数。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

两个回文练习

2017年10月6日

阅读我博客的许多人都是编程学生。现在是十月,在许多大学里,大约是秋季学期的中期,我的学生读者需要练习来巩固他们对学习的理解。这里有两个关于回文的练习。

  1. 像123454321这样的数字是回文的;它的十进制数字从左到右与从右到左是一样的。编写一个程序,确定给定的输入数字是否为回文。
  2. 给定一个字符串列表,例如{“a”“bcd”“ef”“g”“f”“ed”“c”“ba”},编写一个程序来确定字符串的各个字母是否形成回文。请注意,当以相反的方向阅读时,字母在各个单词中的分布可能会有所不同。

你的任务是编写两个识别回文的程序。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

Chez方案设置

2017年10月3日

今天,我们继续进行有关如何配置我的新计算机的最近一系列练习。ChezScheme是一个出色的Scheme编译器/解释器,速度非常快,而且非常无错误,但它包含的库有限,因此用户必须创建自己的库。本说明描述了我使用的一些库。

主库是我的《标准前奏曲》,在https://programmingpraxis.com/standard-prelude网站,每次Chez Scheme启动时加载。Chez Scheme驻留在/usr/local/bin中名为Scheme和petite的两个可执行文件中。我提供了一个shell脚本/usr/local/bin/chez,它在交互式系统启动过程中加载scheme(完整编译器)和Standard Prelude:

#! /usr/local/bin/scheme; 标准序曲(加载“~/scheme/lib/preflede.ss”); 识字编程(加载“~/scheme/lib/tangle.ss”); 交互式编辑(定义*edfile*#f)(定义(加载参数)(当(对?参数)(设置!*edfile*(汽车参数)))(当(不是*edfile*)(错误为'lload“找不到文件”))(when(not(file exists?*edfile*)(error'lload“file not found”(未找到文件))(let*((ss(tangle*edfile*))(i(open-input-string ss)))(let循环((obj(读取i)))(if(eof-object?obj)(闭合输入端口i)(开始(eval obj(交互环境))(循环(读i))))(定义(ed.args)(当(配对参数)(设置!*edfile*(汽车参数)))(当(不是*edfile*)(错误'ed“找不到文件”))(系统(字符串附加“ed”*edfile*))(加载*编辑文件*)(定义(vi.args)(当(配对参数)(设置!*edfile*(汽车参数)))(当(不是*edfile*)(错误“vi”找不到文件“))(系统(字符串附加“vi”*edfile*))(lload*edfile*))(定义(sh.args)(系统(如果(null?args)“sh-l”(字符串连接#\space args))(如果#f#f)); 回家吧(cd“~/方案”)

上述网页提供了标准前奏曲的文档。对于散列表、结构和随机数,我遵从Chez Scheme,而不是使用我的标准前奏曲中的版本,对于Chez Schema本身提供的标准前导曲函数,我也遵从Chez Sheme。《标准前奏曲》中唯一没有加载的部分是avl树,这些树会被移到它们自己的库中。在每次运行Chez Scheme时都会加载我的有文化的编程环境,请参阅https://programmingpraxis.com/2010/08/10/literate-programming和我的交互式编辑环境描述于https://programmingpraxis.com/2017/04/07/edit-files-in-a-repl

我之前在博客中没有讨论的唯一一件事是第页命令。在我的台式计算机上,屏幕足够大,我可以同时打开Scheme REPL和系统外壳窗口,并根据需要在它们之间移动。在我的平板电脑上,屏幕太小了,所以可以方便地快速退出系统shell,执行一些命令,然后返回REPL。这个第页命令(不带参数调用)打开登录shell,并在退出时返回REPL;使用参数调用,它执行参数指定的命令,然后立即返回REPL。这个(如果#f#f)函数结束是返回的标准方式空隙来自函数;这里使用它来抑制返回代码第页正常返回。

我经常使用的其他库出现在下面的页面上;所有这些都存储在~/scheme/lib中,并由加载(加载“~/scheme/lib/xxx.ss”):

avl.ss—avl树priqueue.ss—优先级队列textfile.ss——文本文件数据库的输入、处理和输出pregexp.ss——Dorai Sitaram的可移植正则表达式匹配器streams.ss--SRFI-41流-惰性列表(我是作者)match.ss—Kent Dybvig的模式匹配器

我的正常习惯是在解释器中使用当前目录设置为~/scheme。我为每个项目创建一个目录,然后使用(加载“项目/xxx.ss”)加载项目文件xxx.ss(xxx.ss)输入解释器,然后使用(ed)或(vi)编辑文件。目录~/scheme没有文件,只有项目目录。

如果您是Scheme用户,您的任务是在系统上实现此环境,或者描述您自己的编程环境。完成后,欢迎您在下面的评论中讨论该练习。

页:1 2 4 5 6 7 8 9 10