主题:Moz的作业本
moz
[专家分:37620] 发布于 2005-11-09 12:34:00
页码 楼层 题目
1 1-10 目录
2 11 第一题:关于质数的题目
2 11 第二题:关于分解质因数的题目
2 12 第三题:关于排列组合的题目
2 13 第四题:一个用"*"号列印的倒置三角形点编写好??
*******
*****
***
*
2 13 第五题: 编程输出菱形米字号
*
***
*****
*******
*****
***
*
2 13 第六题: 蛇形矩阵
1 2 6
3 5 7
4 8 12
9 11 13
10 14 15
2 13 第七题: 数字图形编程
3
323
32123
3210123
32123
323
3
2 13 第八题: 两个数字图形的编程思路和方法!!!
第一个 第二个
1 12 11 10 1 1 1 1
2 13 16 9 1 2 2 1
3 14 15 8 1 2 2 1
4 5 6 7 1 1 1 1
2 14 第九题: QB打字母菱星怎么打啊?
A
A B A
A B C B A
A B C D C B A
A B C B A
A B A
A
2 15 第十题: 一个数列,已知它的前三个数是1,1,2.第四数是前三个数的和,
以后每个数分别都等于它前三个数之和
蜗牛爬树中ing...........................................
回复列表 (共98个回复)
41 楼
wangyunchaoPIG [专家分:130] 发布于 2007-06-03 14:06:00
4、
for i = 4 to 1
for j = 1 to i*2-1
?"*";
next j
?
next i
end
42 楼
wangyunchaoPIG [专家分:130] 发布于 2007-06-03 14:09:00
1、
input n
for i = 2 to int(sqr(n))
if n mod i = 0 then print "no":end
next i
print "yes"
end
43 楼
Matodied [专家分:7560] 发布于 2007-06-03 15:16:00
关于你的第一题——“关于质数的题目”:
1、你需要打印前30000个质数,而第30000个质数一定大于32767,要是再用NextZS%(a%)就溢出了,因此最好用NextZS&(a&),如果你还嫌不够保险就用NextZS#(a#)。
2、求质数往往是用以下的方法:
(假设i是要判断质数的数)
IF i=1 THEN PRINT "NO":END
FOR j=2 TO INT(SQR(i))
IF i MOD j=0 THEN PRINT"NO":END
NEXT j
PRINT "YES"
END
这个程序段是完全可以改进的。
首先,关于质数有如下一个定理:
任何除了2和3之外的质数除以6的余数只能是1或者5,不然一定会被2或者3整除。
那么根本不用一个一个试了,只要从1到n\6(如果n MOD 6=0则只要循环到n/6-1)之间循环就可以了,每次循环试两个数:i*6+1、i*6+5。
再者,上面两个数i*6+1、i*6+5一定不能被2和3整除,那么在测试时只要从5到INT(SQR(i))就可以了。
此程序段还可以再简化。
因为我们知道,一个数如果不能被质数j整除,一定不能被j的所有倍数整除,比如n不能被5整除,一定不能被10整除,也一定不能被15、20等所有5的倍数整除,因此只要发现它不能被5整除,以后的10、15、20……就可以跳过去,不用再试了。
那么怎么实现呢?在循环时只试质数。也就是只试5到INT(SQR(i))之间的质数。
可以构造一个字符串,这个字符串从左到右的第i位为“0”表示i不是质数,为“1”表示i是质数,刚开始每一位都为“0”,先给第2位、第3位和第5位改成“1”,然后在测试质数时将循环变量j看成一个指针,刚开始j=5,分2种情况考虑:
(1)如果i能被j整除,i不是质数,退出。
(2)如果i不能被j整除,j的值不是加1,而是自动跳到比j大的最小的质数减1的地方(j=INSTR(j+1,a$,"1")-1)再加1,因为原j和新j之间的数i肯定都不能整除,也就不用再试了。
如果i是质数,就把字符串的第i位自动改成“1”。
程序:(打印1-n之间的所有质数)
DECLARE FUNCTION isprime! (i!)
CLS
OPEN "12345.txt" FOR OUTPUT AS #1
DIM SHARED a$
DEFINT N
1 INPUT n
IF n <= 1 THEN 1
IF n = 2 THEN PRINT 2: WRITE #1, 2: END
IF n = 3 OR n = 4 THEN PRINT 2; 3: WRITE #1, 2: WRITE #1, 3: END
PRINT 2; 3; 5; : WRITE #1, 2: WRITE #1, 3: WRITE #1, 5
IF n = 5 OR n = 6 THEN END
a$ = STRING$(n, "0")
MID$(a$, 2, 2) = "11"
MID$(a$, 5, 1) = "1"
k = n \ 6
IF n MOD 6 = 0 THEN k = k - 1
FOR i = 1 TO k
IF i * 6 + 1 > n THEN EXIT FOR
IF isprime(i * 6 + 1) THEN
PRINT i * 6 + 1; : WRITE #1, i * 6 + 1
MID$(a$, i * 6 + 1, 1) = "1"
END IF
IF i * 6 + 5 > n THEN EXIT FOR
IF isprime(i * 6 + 5) THEN
PRINT i * 6 + 5; : WRITE #1, i * 6 + 5
MID$(a$, i * 6 + 5, 1) = "1"
END IF
NEXT i
END
FUNCTION isprime (i)
FOR j = 5 TO INT(SQR(i))
IF i MOD j = 0 THEN isprime = 0: EXIT FUNCTION
j = INSTR(j + 1, a$, "1") - 1
NEXT j
isprime = 1
END FUNCTION
运行后会有一个名为12345.TXT的文件,就是1-n之间的质数表
44 楼
Matodied [专家分:7560] 发布于 2007-06-04 15:26:00
你的那些打印图形的程序都太简单了,真正最强的图形在这里:
1 4 1 2 1
4 2 3 2 1
1 3 3 2 3
2 2 2 4 1
1 1 3 1 5
给出n,输出像上面的双向蛇形矩阵(n*n的),如n等于5时输出上面的图形。
moz,这题你会吗?
45 楼
moz [专家分:37620] 发布于 2007-06-04 19:33:00
我不会
46 楼
huqing [专家分:30] 发布于 2007-06-26 13:26:00
2是质数吗?
47 楼
剑圣风暴 [专家分:450] 发布于 2007-07-25 07:44:00
moz,这是你一天的作业?好强!不愧是得分王!不愧是副版主!!!
48 楼
剑圣风暴 [专家分:450] 发布于 2007-07-25 21:35:00
21楼的叫“圣约夫杀人问题。”
49 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-26 08:04:00
[quote]moz,这是你一天的作业?好强!不愧是得分王!不愧是副版主!!![/quote]
50 楼
星空之梦 [专家分:10] 发布于 2007-08-02 14:47:00
[em10]
我来回复