自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(211)
  • 收藏
  • 关注

原创 其他趣味程序-数字移动

将题目中的3x3矩阵用一个一维数组表示,中间的元素(第四号)刚好为空格,设计另一个指针数组,专门记录矩阵外边八个格构成环时的连接关系。由于受题目要求的规则“只能讲数字沿线移动向空白的点”,所以要利用中间的空格进行排序,这样要求的排序算法与众不同。在找到1所在的位置后,其余各个数字的正确位置就是固定的,我们可以按照下列算法从数字2开始,一个一个地调整各个数字的位置。//指向输入的整数,链首为整数的最低的个位,链尾为整数的最高位。=NULL) //将接收的临时数据链中的数据转换为所要求的标准形式。

2025-08-04 07:18:38 293

原创 其他区趣味程序-超长整数的加法

/指向输入的整数,链首为整数的最低的个位,链尾为整数的最高位。=NULL) //将接收的临时数据链中的数据转换为所要求的标准形式。=-1) //若不是表头,则输出。

2025-08-04 07:15:24 202

原创 其他趣味程序-八后问题

程序中首先假定a[1]=1,表示第一个皇后放在棋盘的第一列第一行的位置上,然后试探第二列中皇后可能的位置,找到合适的位置后,再处理后续的各列。数组的下标i表示棋盘上的第i列,a[i]的值表示皇后在第i列所放的行的位置。if(a[i]==a[i-1]) //若a[i]的值已经经过一圈追上a[i-1]的值。//正在处理的元素下标,表示前i-1个元素已符合,正在处理第i个元素。//当a[i]的值为NUM时将a[i]的值置1。if(a[k]==a[i])//判断是否有多个皇后在同一行。i = NUM-1;

2025-08-03 08:37:35 419

原创 其他趣味程序-满足特意条件的数列

≥in”的要求,提示我们可先确定最右边in元素的值为1,然后按照条件使前一个元素的值一定大于等于当前元素的值,不断地向前推进就可以解决问题。//sum+i[k] = total && k=1则设置flag标记。if(sum+i[k]<total) //若后k位的和小于指定的total。if(++k>n) //k向后回退一个元素后判断是否已退出最后一个元素。//置第k位的值后k-1。if(k<=1) //若正要处理的是第一个元素。//当前从后向前k个元素的和。

2025-08-03 08:36:54 185

原创 其他趣味程序-选美比赛

当半决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑通名次的选手人数。为此,专门移入一个存放名词的数组,再采用通常的算法:在尚未排出名次的元素中找出最小值,并对具有相同值的元素进行处理,重复这一过程,直到全部元素排好为止。//为简单直接定义选手的分数。则输出名次为: 3,1,2,5,1,3,4。选手序号: 1,2,3,4,5,6,7。选手得分: 5,3,4,7,3,5,6。

2025-08-03 08:36:04 260

原创 其他趣味游戏-将阿拉伯数字翻译为罗马数字

题目中给出了阿拉伯数与罗马数字的对应关系,题中的数字转换实际上就是查表翻译,即将整数的百、个、十位依次从整数中分解出来,查找表中相应的行后输出对应的字符。将大于0小于100的阿拉伯数转换为罗马数字。//通过对照表翻译输出。//从高位向低位依次取各位的数字。1.问题分析与算法设计。

2025-08-03 08:35:16 205

原创 其他趣味程序-兔子产子

从前有一对长寿的兔子,他们每一个月生一对小兔子,新生的小兔子两个月就长大了,在第二个月的月底就开始生他们的下一代小兔子,这样一代一代生下去。斐波那契数列在程序中可以用多种方法进行处理。按照其通项递推公式利用最基本的循环控制就可以实现题目的要求。n是项数(n>=3)。它就是著名的斐波那契数列,该数列的前几项为:1,1,2,3,5,8,13…//利用通项公式求解N项的值。//控制输入正确的N值。输出:1 1 2 3 5 8 13 21 34 55。1.问题分析与算法设计。

2025-08-02 08:41:33 381

原创 智力游戏-汉诺塔

约19世纪末,在欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下,有小到大顺序串着由64个圆盘构成的塔,游戏的目的是将最左边杆上的盘全部移动到最右边的杆上,条件是依次仅能移动一个盘,且不允许放在小盘的上面。//movedisc函数完成的功能是:将fromneedle杆上的N个盘子借助usingneedle杆移动到toneedle杆上。该函数的功能是:将N个盘子从A杆上借助C杆移动到B杆上。将这个过程继续下去,就是要先完成移动63个盘子,62个盘子,61个盘子……

2025-08-02 08:40:21 600

原创 智力游戏-人机猜数游戏2

但在接收人的输入信息时缺少必要的出错保护功能,同时在进行第3步推理过程中,没有保留每次猜出的数字位置信息及人输入的回答,这样对于人输入的信息就无法进行合法性检验,即无法检查认得输入信息是否自相矛盾,同时也无法充分利用前面的结果。若差为2:说明前一次输入的一定为0,本次输入的为2,本次交换的两个数字的位置是正确的,只要交换两外两个没有交换过的数字即可结束游戏。j++) //实现四个数字的两两(a[j],a[k])交换。//若上次与本次的差为-2,则说明已交换的(a[j],a[k])是错误的。

2025-08-02 08:39:44 497

原创 智力游戏-人机猜数游戏1

当截取下一位数字进行比较时,就不应再与上述位置上的数字进行比较,以避免所猜的数中的一位数字与对应数中多位数字“相同”的错误情况。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少时为止。但在判断几位数字正确时,则应当注意:若计算机所想的是“1123”,而人所猜的是“1567”,则正确的数字只有1位。个位为第1位,千位为第4位。if(a%10==s%10) //若第i位与人猜的第t位相同。

2025-08-02 08:28:36 418

原创 智力游戏-搬山游戏

设有n座山,计算机与人为比赛的双方,轮流搬山。规定每次搬山的数目不能超过k座,谁搬最后一座谁输。游戏开始时,计算机请人输入山的总数(n)和每次允许搬山的最大数目(k)。然后请人先开始,等人输了需要搬走的山的数目后,计算机马上打印出它搬多少座山,并提示尚余多少座山。a.当:剩余山数目-1<=可移动的最大数k时,计算机要移(剩余山数目-1)座,以便将最后一座山留给人。如果算出结果为0,即整除无余数,则规定只搬1座山,以防止冒进后发生问题。if(x<1||x>k||x>n) //判断搬山数是否符合要求。

2025-08-01 08:48:54 411

原创 智力游戏-抢30

若人先走第一步,那么计算机只好等待人犯错误,如果人先走第一步且不犯错误,那么人就会取胜;两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。nonre((m=re(n))+n)) //判断整数与其反序数相加后是否为回文数。if(m+n>=MAX) //超过界限输出提示信息。long re(long a) //求输入整数的反序数。a/=10) //将整数反序。//返回反序后的整数值。

2025-08-01 08:48:23 310

原创 智力游戏-常胜将军

在计算机后走的情况下,要想使计算机成为“常胜将军”,必须找出取胜的关键。根据本题的要求可以总结出:后走一方取子的数量对对方刚才一步取子的数量之和等于5,就可以保证最后一个子是留给先取子的那个人的。现有21根火柴,两人轮流取,每人每次可以取1至4根,不可多取,也不能不取,谁取最后一根火柴谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取,计算机一方为“常胜将军”。

2025-08-01 08:47:49 230

原创 智力游戏-黑白子交换

所谓的“阻塞”现象就是:在移动棋子的过程中,两个尚未到位的同色棋子连接在一起,使棋盘中的其它棋子无法继续移动。产生“阻塞”的原因,当棋盘出现“黑、白、空、黑”或“白、空、黑、白”状态时,不能向“左”或向“右”移动中间的棋子,只移动两边的子。按照上述规则,可以保证在移动棋子的过程中,不会出现棋子无法移动的现象,且可以用最少的步数完成白子和黑子的位置交换。//flag 为棋子移动一步的标记 1:尚未移动棋子 0:已经移动棋子。产生“阻塞”现象的原因是在第2步,白子不能向右移动,只能将黑子向左移动。

2025-08-01 08:47:17 496

原创 智力游戏-自动发牌

将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对饮数字3,黑桃3对应数字4,红桃3对应数字5…if(t%4==0) b1[b11++]=a[t-1];//flag= 1;i++) //将数组中的值转换为相应的花色。i++) //将数组中的值转换为相应的花色。

2025-08-01 08:46:38 402

原创 定理与猜想-回文数的形成

任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步骤,则最终可得到一个回文数,请编程验证。nonre((m=re(n))+n)) //判断整数与其反序数相加后是否为回文数。int nonre(long s) //判断给定的整数是否是回文数。if(m+n>=MAX) //超过界限输出提示信息。long re(long a) //求输入整数的反序数。a/=10) //将整数反序。

2025-07-31 09:32:52 318

原创 定理与猜想-尼科彻斯定理

通过定理的证明过程可知:所要求的奇数数列的首项为(axa-a+1),长度为 a。编程的算法不需要特殊设计,可按照定理的证明过程直接进行验证。c++)//输出数列,首项为a*a-a+1,等差值为2。对于任一正整数a,不论a是奇数还是偶数,整数(axa-a+1)必然为奇数。//求数列的前a项的和。//若满足条件则输出"Y"printf(" N\n");b = a*a*a;

2025-07-31 09:32:00 143

原创 定理与猜想-卡布列克常数

b.将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位);void prase_sort(int num,int* each) //函数将整数分解,数字存入each数组中。=6174&&num) //若不等于6174且不等于0则进行卡布列克运算。a.将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;i++) //将NUM分解为数字。

2025-07-31 09:30:10 365

原创 定理与猜想-四方定理

数论中著名的“四方定理”讲的是:所有的自然数至多只要用四个数的平方和就可以表示。对四个变量采用试探的方法进行计算,满足要求时输出计算结果。本题是一个定理,我们不用去证明它而是编程序验证。1.问题分析与算法设计。

2025-07-31 09:29:25 178

原创 定理与猜想-角谷猜想

日本一位中学生发现一个奇妙的“定理”,请角谷教证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行验证。本题是一个尚未获得一般证明的猜想,但屡试不爽,可用程序验证之。//n不等于1则继续以上过程。n = n*3 +1;//若为偶数,n除以2。1.问题分析与算法设计。

2025-07-31 09:28:31 145

原创 定理与猜想-奇数平方的一个有趣性质

题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行验证(程序中仅验证到3000)printf("(%ld*%ld-1)/8",a,a);//输出(奇数的平方-1)/8。//输出被8除后的余数。//输出被8除后的商。编程验证“大于1000的奇数其平方与1的差是8的倍数”printf("%ld:",a);本题是一个很容易证明的数学定力,我们可以变成验证之。

2025-07-31 09:22:13 277

原创 定理与猜想-求π的近似值2

随机数法求π近似值的思路是:在一个单位边长的正方形中,以边长为半径,以一个顶点为圆心,在正方形上做四分之一圆。随机的向正方形内扔点,若落入四分之一圆内则计数。重复向正方形内扔足够多的点,将落入四分之一圆内的计数除以总的点数,其值就是π值四分之一的近似值。if(x*x+y*y<=10000) //利用圆方程判断点是否落在圆内。运行会得到不同结果,因为采用统计规律求π的近似值。//若落在圆内则计数。1.问题分析与算法设计。

2025-07-30 09:07:54 225

原创 定理与猜想-求π的近似值1

利用“正多边形逼近”的方法求π值在很早以前就存在,我们的仙人祖冲之就是用这种方法在世界上第一个得到精确度达小数点后第六位的π值的。利用圆内接正六边形边长等于半径的特点,将边数翻番,做出正十二变形,求出边长。if((2*i*b-i*e)<1e-15)//精度达到1e-15则停止计算。//计算圆内接正多边形的边长。//保存本次正多边形的边长作为下一次精度控制的依据。i*=2) //正多边形边数加倍。y= 2*i*x i:为加倍前的正多边形的边数。//输出π值和正多边形的边数。1.问题分析与算法设计。

2025-07-30 09:06:39 328

原创 数的变幻-波瓦松的分酒趣题

法国著名数学家波瓦松在青年时代研究过一个有趣的数学问题:某人有12品脱的啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和一个5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?//a满瓶的容量, y第一个空瓶的容量 z第二个空瓶的容量。其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y刺,最后在12品脱的瓶中剩余6品脱的酒。//a满瓶的容量 y第一个空瓶的容量 z第二个空瓶的容量。else if(b>z-c) //如果第一瓶的重量>第二瓶的剩余空间。

2025-07-30 09:04:54 619

原创 数的变幻-小明买书

不巧的是,爸爸兜里只带了十几块钱,为了让小明过一个愉快的假期,爸爸仍然同意买书,但提出了一个要求,要小明从六本中选出若干本,使得单价相加所得的和同10最接近。关于求与10的差值应当注意的是:差值的含义是指差的绝对值。例如:“9-10=-1”和“11-10=1”,但9和11这两者与10的差值都是“1”。m++) //输出全部i个与10的差值均为min的组合。if(flag%10) //将b[]中存的标记flag还原为各个数的组合。else if(min-x>1.e-6)//对新的min的处理。

2025-07-30 09:03:56 362

原创 数的变幻-10个小孩分糖果

是个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。//将分出的一半糖给右边的孩子。if(sweet[i]%2==0) //将每个人手中的糖直接分出一半。while(judge(sweet)) //输出每个人手中糖的块数。

2025-07-30 09:02:48 296

原创 数的变幻-可称1-40磅的四块砝码

后来商人称得每块的重量都是整磅数,而且发现用着四块碎片可以在天平上称1至40磅之间的任意重量。编程时只要根据以上公式,使“右侧砝码重量总和-左侧砝码重量总和”可以表示1到40之间的全部重量即可。编程中要注意的是:怎样采用一种简单的方法来表示一个砝码是在天平的“左侧”,还是“右侧”,或者根本没有使用。题目中给出的条件是“在天平上”,这意味着:同一砝码既可以放在天平的左侧,又可以放在天平的右侧。

2025-07-30 09:01:18 437

原创 数的变幻-和数能表示1-23的五个整数

已知五个互不相同的正整数之和为23,且从这五个数中挑选若干个加起来可以表示从1到23之内的全部自然数,问这五个自然数都是什么?//f:分解的5个数可以表示出1~23的标记。从计算机程序设计的角度来说,可以用穷举法分解23,然后判断所分解的五个数是否可以表示从1到23之间的全部整数。a++) //将23分解为a,b,c,d,e五个数。1.问题分析与算法设计。

2025-07-30 09:00:14 363

原创 数的变幻-邮票组合

按照题目要求,3分的邮票可以取0、1、2、3、4张,5分的邮票可以取0、1、2、3张。采用穷举法进行组合,可以求出这些不同面值不同张数的邮票组合后的邮资。某人有四张3分的邮票和三张5分的邮票,用这些邮票的一张或若干张可以得到多少种不同的邮资?a[k]&&s) //没找到相同的邮资则满足要求存入数组。k++)//查找是否有相同的邮资。//计算组成的邮票面值。i++) //i,取三分邮票的张数。j++)//j,取五分邮票的张数。其中i为3分邮票的张数,j为5分邮票的张数。

2025-07-30 08:54:50 246

原创 数的变幻-约瑟夫问题

从第一个人开始对尚未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已经被扔下海了。这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15个非教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法,30个人围城一个圆圈,从第一个人开始依次报数,每数到第9个人就将他扔入大海,如此循环进行直到仅余15为止。+++@@+@+@@@+@+++@@+@@@+++@+@@+ (@教徒 +扔下海的非教徒)) //k决定哪个人被扔下海的计数器。

2025-07-29 09:02:54 262

原创 数的变幻-魔术师的猜牌术2

魔术师再次表演,他将红桃和黑桃全部叠在一起,牌面朝下放在手中,对观众说,最上面一张是黑桃A,翻开后放在桌上。以后,从上之下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放在最底下,第三张给观众看,是黑桃3,。这些并不影响我们求解题目的思路,仍可按照倒推的方法,得到原来魔术师手中的牌的顺序。//若数到第3个空盒子,则将牌放入空盒中。//对空盒计数,数组下标指向下一个盒子。//j超过最后一个元素指向1号元素。//控制空盒计数为3。//输出牌的排列顺序。1.问题分析与算法设计。

2025-07-29 09:02:08 101

原创 数的变幻-魔术师的猜牌术1

魔术师将最上面的那张牌数位1,把它放过来正好是黑桃A,将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这叠牌的下面,将第二张牌反过来,正好是黑桃2,将它放在桌上。人工推倒的方法是:在桌子上放13个空盒子排成一圈,从1开始顺序编号,将黑桃A放入1号盒子中,从下一个空盒子开始对空的盒子计数,当数到第二个空盒子时,将黑桃2放入空盒子中,然后再从下一个空盒子开始对空盒子计数,顺序放入3、4、5…if(n==i) //若数到第i个空盒子,将牌放入空盒中。1.问题分析与算法设计。

2025-07-29 09:01:22 332

原创 数字0-9的奇妙变幻-九位累进可除数

在穷举的过程中,当确定部分位的值后,马上就判断产生的该部分是否符合“累进可除”条件,若符合,则继续穷举下一位数字,否则刚产生的那一位数字就是错误的。//i:正在处理的数组元素,表示前i-1个元素已经满足要求,正处理的是第i个元素。//否则a[i]的初值为a[i-1]值的下一个值。if(a[i]==a[i-1]) //若a[i]的值已经经过一圈追上a[i-1]if(a[i-1]==NUM) //若i-1的值已为NUM,则a[i]的值为1。//第i位的值取下一个,加1。

2025-07-29 09:00:14 599

原创 数字0-9的奇妙变幻-除式还原2

编程时为了方便,将被除数分解:前四位用a[0]表示,第五位用a[1],第六位用a[2],第七八位用a[3],除数用变量b表示;分解商:第一位用c[0],第三位用c[1],第五位用c[2];其他的部分上分别表示为:b式的前两位为d[0],d式的前三位为d[1],f式的前两位为d[2]。由除数乘商的第一位为一个四位数可知,商的第一位只能为8或9且除数≥112.同时商的第五位也为8或9,被除数的前四位一定≤142*9+99且≥1000+10。商 8<=c[0]<=9 7<=c[1]<=8 8<=c[2]<=9。

2025-07-29 08:57:44 301

原创 数字0-9的奇妙变幻-除式还原1

if( j*(l/100)%100 == 77 && j*(l/100)>100 )//商的第一位与除数的积的后两位为77。if(j%(l%10)<100 && j*(l%10)>10) //商的个位数与除数的积为两位数。if(j*7%100>=70 && j*7%100<80)//7乘以除数的积的第二位为7。l=(i/j)%100>=70 && //商l在100到999之间且十位数为7。if(i%1000-i%100 == 400) //4.被除数的第三位一定为4。i%j==0 //可以整除。

2025-07-29 08:56:47 362

原创 数字0-9的奇妙变幻-乘式还原2

循环实现简单易行,但嵌套的层次太多,需要穷举的变量的数量直接影响到循环嵌套的层数,这种简单的实现方法缺少技巧性。程序中并没有直接对质数进行穷举,而是将每个质数与1到4顺序一一对应,在穷举时为处理简单仅对1到4进行穷举处理,待要判断产生的乘积是否满足条件时再利用一个数组完成向对应质数的转换。if(a[i]>=C_NUM) //当要处理的元素取值超过规定的C_NUM时。//a[4]:被乘数的十位 a[5]:个位。

2025-07-29 08:55:10 325

原创 数字0-9的奇妙变幻-乘式还原1

int jud(long q,char* pflag) //判断一个数的每一位是否满足要求的判断函数。if(q==0&&*pflag==NULL) //q的位数与标志字符串的长度相同时,返回1。if(flag&&jud(t1+t2+t3,"00101"))//判断乘式的积。

2025-07-28 09:14:42 465

原创 数字0-9的奇妙变幻-减式还原

类似的问题从计算机算法的角度来说是比较简单的,可以采用最常见的穷举法解决。程序中采用循环穷举每个字母所可能代表的而数字,然后将字母代表的数字转换为相应的整数,代入算式后验证算式是否成立即可解决问题。编写程序求解下式中各字母所代表的数字,不同的字母代表不同的数字。//穷举p、e、a、r的全部取值。//四个字母互不相等。

2025-07-28 09:13:06 345

原创 数字0-9的奇妙变幻-由8个整数组成奇特的立方体

简化问题,将8个顶点对应数组中的8个元素,将“每个面上的四个数之和皆相等”转换为数组元素之间和的相等关系。这里的关键在于正确地将立方体的8个顶点与数组的8个元素对应。a1++) //flag:完成标记 flag =1,表示完成。任意给出8个整数,将这8个数分别放在一个立方体的8个顶点上,要求每个面上的四个数之后皆相等。=a1) //前四个数不能相同。=a1) //前三个数不能相同。if(ii%2) //和为奇数则输入的8个数不可用。=a1) //前两个数不能相同。输出 27/----------/24。

2025-07-28 09:10:12 452

原创 数字0-9的奇妙变幻-1-9组成1:2:3的三个3位数

将1到9这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍。int ok(int t,int* z) //分解t值,将其存入z指向的三个数组元素,若满足要求返回1。试探第一个三位数后,计算出另外两个数,将其分别分解成三位数字,然后判断后确定所试探的数就是答案。if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6))//若满足题意。m++) //试探可能的三位数。

2025-07-28 09:08:28 411

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除