加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【学习任务6】找出一个自然数

(2011-10-22 20:44:40)
标签:

教案

分类: QBASIC教程
 【学习任务6找出一个自然数N( 1 N 15,且N为奇数),要求找出这样的 N个连续的正整数,使得前(N+1)2个正整数的平方和等于后(N-1)2个正整数的平方和。

v 规定:连续的正整数中最小的数不大于100

v 例如:当 N=5时,满足条件的5个正整数为:1011121314

v 102+112+122=132+142

v 输入:N

v 输出:满足条件的N个正整数。

v 问题分析

v 要找连续的N个正整数(N为奇数,且1N15),使得前(N+1)2个数的平方和等于后(N-1)2的平方和。据题意知,N的取值只可能是135791113158个奇数,下面我们分别来讨论:

v N = 1时,因为(1+1)/2=1(1-1)2=0,一个正整数的平方和不可能为0,所以 N=1不符合;

v N = 3时因为(3+1)2 = 2(3-1)2=1,即讨论前面2个连续正整数,和后面一个正整数的平方和的问题。

v 连续的3个正整数可能是:1 2 32 3 43 4 54 5 6

v 123 12+22=5 32= 9 前面平方和<后面平方和

v 234 22+32=13 42=16 前面平方和<后面平方和

v 345 32+42=25 52=25 满足条件,前面平方和=后面平方和

v 456 42+52=41 62=36 前面平方和>后面平方和

v 显然,当N=3时,满足条件的3个正整数为345;当N=5时,连续的5个正整数可能是:1 2 3 4 52 3 4 5 6……10 11 12 13 14……用类似的方法可知答案只有一个,即满足条件的5个正整数为1011121314

v 由以上分析,只要根据问题中的条件,将可能的解的情况列举出来,进行一一验证是否符合整个问题的求解要求。当N为某一个值时,可能有一个答案,也有可能不存在符合条件的值。

v 变量说明:

v N:输入的自然数;

v A:数组,用于存放符合条件的N个整数;如果N=1,则输出无解,结束;

v X:累加器,用于存放前(N+1)2个数的平方和;

v Y:累加器,用于存放后(N—1)2个数的平方和;

v C:累加器,用于从1开始递增枚举;

v I:循环变量。

v 【算法设计

v 0)先判断是否满足条件N为奇数,且1N15

v 1)符合条件后,建立一个有N个元素的数组A(N)A(N)之中的初值皆为0

v 2)给C0

v 3)将连续N个整数按序放到A数组中;

v 4)求前(N+1)2个数组变量值平方和,放入X中;

v 5)求后(N+1)2个数组变量值平方和,放入Y中;

v 6)如果X=Y则找到解,输出结果结束;

v 7)若没有找到解,XY0,穷举变量C1

v 8)将A数组皆增加1,即A(I)=C

v 9)如果C=100,则结束循环。

v 10)结束。

v 程序清单

v DO

v INPUT "请输入奇数N(1—15)"N

v LOOP UNTIL N / 2 <> N \ 2 AND N >= 1 AND N <= 15

v IF N = 1 THEN PRINT "没有!: END

v DIM A(N): C = 0

v DO

v FOR I = 1 TO N: A(I) = A(I) + I: NEXT I

v FOR I = 1 TO (N + 1) / 2: X = A(I) * A(I) + X: NEXT I

v FOR I = (N + 1) / 2 + 1 TO N: Y = A(I) * A(I) + Y: NEXT I

v IF X = Y THEN

v FOR I = 1 TO N

v PRINT A(I)

v NEXT I: PRINT

v EXIT DO ’找到符合条件的数后,结束穷举

v END IF

v X = 0: Y = 0: C = C + 1

v FOR I = 1 TO N: A(I) = C: NEXT I

v LOOP UNTIL C = 100 ’N个整数中最小数为100时还没找到,则结束穷举

v END

v 运行结果

v 请输入奇数N(1—15)1

v 没有!

v 再运行一次:

v 请输入奇数N(1—15)3

v 3 4 5

v 在数学中,我们常提到排列组合,什么叫排列,什么叫组合呢?以一个例子来说明,如举出所有用123这三个数字组成的,且每位数字互不相同的三位数,通过试验我们得知有六种排列:123132213231312321;而组合只有一种。即排列是分先后顺序的,而组合是不分次序的:如ABBA是同一个组合。由于组合中的数无顺序要求,在此约定,不妨以最小的组合来表示。即以123”来代表所有由123不同数码构成的组合。

v【学习任务7N(N>=3)位同学去照相,每次照三个同学,共可照出多少张不全相同的照片?每张照片中都是谁?

v 【问题分析

v 这是一个组合问题,即从N个元素中每次取3个元素的组合。如果设这N个同学的代号分别为:123……N,则问题变为从这N个数字任取三个的组合。按照上面最小组合是123最大组合是789

v 我们用三重循环来实现,循环变量IJK分别代表取出来的三个同学,则其取值范围是:

v I1 N-2

v JI+1 N-1

v KI+2 N

v 程序清单

v INPUT N

v T = 0

v FOR I = 1 TO N - 2

v FOR J = I + 1 TO N - 1

v FOR K = J + 1 TO N

v PRINT I, J, K

v T = T + 1

v NEXT K

v NEXT J

v NEXT I

v PRINT "共可照出"; T;"张不同的照片。"

v END

v 如果考虑每个人在照片中的位置,又有多少张不同的照片呢?

v 对于数字的排列组合问题很容易用穷举法来实现,程序简单、易懂。但如果需要排列的数字较多时,这样做比较麻烦。

v 学习任务8警察局抓了 ABCD四名偷窃嫌疑犯,其中有一人是小偷。审问中 A说:我不是小偷。B说:C是小偷。C说:小偷肯定是DD说:C在冤枉人。现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷。

v 问题分析

v 这个题目是逻辑推理题,常用的方法是用穷举法把各种可能的组合都列举出来,然后根据题目的条件排除不合乎要求的组合或选择需要的组合。

v 方法1 ABCD四个变量存放ABCD四个人是不是小偷的信息;0表示这个变量代表的人不是小偷;1表示的是小偷。如:A=0,说明A不是小偷,若A=1说明 A是小偷。以A,BCD四个变量作为循环变量构造四重循环,每重循环都从01,这样就可以把谁是小偷的各种情况都列举出来。

v 题目给出的其他条件可以用有关的表达式进行表示:

v 四个人中有一名小偷:A+B+C+D=1

v A说的话: A<>1

v B说的话: C=1

v C说的话: D=1

v D说的话: D<>1

v 四句话中只有三句真话(逻辑值真为-1),所以ABCD四句话的逻辑值相加等于-3。即:

v (A<>1)+(C=1)+(D=1)+(D<>1)=-3

v 根据分析,写出以下程序:

v 程序清单

v REM L10-11A

v FOR A = 0 TO 1

v FOR B = 0 TO 1

v FOR C = 0 TO 1

v FOR D = 0 TO 1

v IF (A+B+C+D=1) AND ((A<>1)+(C=1)+(D=1)+(D<>1)=-3) THEN

v IF A = 1 THEN PRINT A; ’以下是输出结果

v IF B = 1 THEN PRINT B;

v IF C = 1 THEN PRINT C;

v IF D = 1 THEN PRINT D;

v PRINT "是小偷"

v END IF

v NEXT D, C, B, A

v END

v 方法2 A,B,C,D四个人进行编号,号码分别为1234。让变量X存放小偷的编号。X的值从1取到4,假设了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成:

v A说的话:X<>1,

v B说的话:X=3

v C说的话:X=4,

v D说的话:X<>4NOT(X=4)

v X的值使这四个逻辑式的值相加等于-3的时候,它就是小偷的编号。

v 这种解法程序十分简单。

v 程序清单

v REM L10-11B

v FOR X = 1 TO 4

v IF (X <> 1) + (X = 3) + (X = 4) + (X <> 4) = -3 THEN

v PRINT CHR$(64+X); "是小偷": EXIT FOR

v X的值转换为大写字母输出,退出循环

v END IF

v NEXT X

v END

穷举法的应用很广泛,在利用穷举法解题时,有时一一列举出的情况数目会大得惊人,所以应注意:尽可能将明显不符合的情况排除在外,以减少穷举的可能解的个数。在实现解题时列举的方法也不一定是单一的,要根据实际情况具体分析。

【练

用穷举法编写下列题目的程序:

1.如果一个数从左边读和从右边读都是同一个数。例如:686就是一个回文数。编一程序,求出1000以内所有的既是回文数同时又是素数的自然数。

2.甲乙两个自然数的和、差、积、商四数加起来等于243,求甲乙两数。若它们的和、差、积、商四数之积等于94221,那么甲乙两数又各是多少?

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有