回 帖 发 新 帖 刷新版面

主题:Moz的作业本

页码  楼层  题目
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 楼

4、
for i = 4 to 1
    for j = 1 to i*2-1
        ?"*";
    next j
    ?
next i
end

42 楼

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 楼

关于你的第一题——“关于质数的题目”:
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 楼

你的那些打印图形的程序都太简单了,真正最强的图形在这里:
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 楼

我不会

46 楼

2是质数吗?

47 楼

moz,这是你一天的作业?好强!不愧是得分王!不愧是副版主!!!

48 楼

21楼的叫“圣约夫杀人问题。”

49 楼

[quote]moz,这是你一天的作业?好强!不愧是得分王!不愧是副版主!!![/quote]

50 楼


[em10]

我来回复

您尚未登录,请登录后再回复。点此登录或注册