回 帖 发 新 帖 刷新版面

主题:叫你喷血的题

设有序的n个位子和n个人。第一个人把全部位子标为0;第二个人把序号是2的倍数的位子上的标号反过来,0改为1;第三个人把所有序号是三的位子上的标号又反过来,0变为1,1又变为0,。。。。。;依次类推。当第n个人标了号以后,又哪些位子变为了1?请编写程序

回复列表 (共10个回复)

沙发

平方数啊,喷什么血啊,水题一个

板凳

吓死了,还以为是什么超级难的题目呢?原来是这个。
CLS
INPUT n: DIM a(n)
FOR i = 2 TO n
    FOR j = 1 TO INT(n / i): a(i * j) = 1 - a(i * j): NEXT j
NEXT i
FOR i = 1 TO n
    IF a(i) THEN PRINT i;
NEXT i
END

3 楼

[quote]吓死了,还以为是什么超级难的题目呢?原来是这个。
CLS
INPUT n: DIM a(n)
FOR i = 2 TO n
    FOR j = 1 TO INT(n / i): a(i * j) = 1 - a(i * j): NEXT j
NEXT i
FOR i = 1 TO n
    IF a(i) THEN PRINT i;
NEXT i
END

[/quote]
你输入100000000,然后你看看你的程序要算多久才开始显示结果

4 楼

我在很多次运行以后发现了这里有个秘密:
由于初始状态全是1,因此如果这个数被点到的次数为偶数,最后结果就为1,这个数倍点到的次数为奇数,最后结果就为0;由于被点到的次数就是这个数的约数总数,因此,只有完全平方数的因数个数才是奇数,所以输出结果为2-n之间的非完全平方数。
程序可以做一下改进:
CLS
INPUT n
FOR i = 1 TO INT(SQR(n))
    s = i * i
    FOR j = s + 1 TO s + i * 2
        IF j <= n THEN PRINT j; ELSE END
    NEXT j
NEXT i
END

5 楼


谢谢各位同胞们啦!

6 楼

之所以喷血是因为它太简单了!
[em54][em54]

7 楼

9494,非常正确

8 楼

其实是有规律的:


011011110111111011111111....

0 2个一 0 4个一 0 6个一 0 8个一 0 10个一 0 12个一 0 14个一 0 16个一 0 18个一 0 20个一 ……

9 楼

我也出一道:
已知有四个三位数A、B、C、D,它们满足以下要求: 
①A*B=C*D。
②A和C、B和D分别为反序数。(如:A为134,C为431,A和C即为反序数,而且A<>B、C<>D。)
③A、B、C、D中的每一个三位数本身的个位、十位、百位都不相同。
试编程输出所有满足以上条件的三位数组合,重复的不计。(20分)
如102 402 201 204为一组,因为102*402=201*204, A和C、B和D分别为反序数, 而且A<>B、C<>D,每个数本身各位上的数字都不相同。

10 楼

CLS
INPUT n
DIM a(n)
for i=  1 to n
a(i)=1
next i
FOR i = 1 TO n
FOR j = i TO n step i
a(j) = a(j) * -1
NEXT j
NEXT i
FOR i = 1 TO n
IF a(i) =1 THEN PRINT i;
NEXT i
END

我来回复

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