回 帖 发 新 帖 刷新版面

主题:聪明的阿卑多

聪明的阿卑多
也许你从没听说过阿卑多,但你一定知道他爷爷的爷爷的爷爷,那就是聪明绝顶的阿凡提先生。是的,阿卑多也是个聪明的小孩。
    一天,阿卑多骑着他的小毛驴,在小镇上晃悠,正好遇上了小巴依——那个自以为是的小财主。小巴依正在炫耀他的金币:
    “你们见过这样的金币么?这可不是一般的金币,你看它们多大多重啊!最主要的是,它们每个上面都刻有我的名字和一个编号,是独一无二的!看看,从我出生开始,每2个月,爸爸便给我1个特做的大金币,并从1开始编号,现在我已经有60枚了,哈哈……”小巴依见了阿卑多,于是便想考一考他:“阿卑多,听说你是最聪明的。看见我每个金币上的数字了吗?你现在拿取一半的金币,并能用你拿的若干金币上的数的和表示我的任意一枚金币上的数。如果你能办到,那么就奖你一枚金币;如果不能,就给我做三年长工好了。”阿卑多想了一想,说:“我可以只拿1/10就办到,不过如果我办到了,你就得分一半金币给我。”     1/10?小巴依心想,你准备给我当长工好了。
    于是阿卑多开始取金币……自然,阿卑多出色的完成了任务,得到了30枚金币,同样的,他把这些金币都分给了穷人们。
    给你的任务就不同了。
输入:一个数n(1<=n<=1000) 表示金币枚数(金币上的数分别为1到n)
输出:两个数,阿卑多最少要拿的金币数以及不同的方案数。
样例:
Abido.in     Abido.out 
6          3  2 (2种拿法:拿取编号为1、2、3的金币;或拿取编号为1、2、4的金币)
测试数据
输入    输出
1    1 1
127    7 1
32    6 724
500    9 74
800    10 13632426

回复列表 (共10个回复)

沙发

CLS
DIM SHARED N, K, S, Y AS DOUBLE
INPUT N
DO
K = K + 1
M = 2 ^ K – 1
LOOP UNTIL M >= N
DIM SHARED A(K)
HXY(1)
PRINT K; Y
END

SUB HXY(X)
FOR I = S + 1 TO A(X – 1) + 1 STEP -1
  A(X) = I
  S = S + I
  IF X < K THEN
  HXY(X + 1)
  ELSE
  S = S – I
  IF S + I >= N THEN
  Y = Y + 1
  ELSE
EXIT FOR
END IF
END IF
NEXT I
S = S – A(X – 1)
END SUB

板凳

hxy 你好厉害!

3 楼

ZHANGHONGCHENG,能不能再出几道我们没做过的题目呀?

4 楼

洪新宇要直接上七年级了

5 楼

hxy 记住再也切勿泄漏题目了~

6 楼

我对你刮目相看,太了不起了

7 楼

这是我编得DECLARE SUB hxy (x!)
CLS
DIM SHARED n, k, s, y AS DOUBLE
INPUT n
DO
  k = k + 1
  m = 2 ^ k - 1
LOOP UNTIL m >= n
DIM SHARED a(k)
hxy (1)
PRINT k; y
END



SUB hxy (x)
FOR i = s + 1 TO a(x - 1) + 1 STEP -1
  a(x) = i
  s = s + i
  IF x < k THEN
    hxy (x + 1)
  ELSE
    s = s - i
    IF s + i >= n THEN
      y = y + 1
    ELSE
      EXIT FOR
    END IF
  END IF
NEXT i
s = s - a(x - 1)
END SUB


8 楼

但缺陷就是不能数大于100的数

9 楼

洪新宇,你还记得区赛在你旁边的人忙?

10 楼

那是

我来回复

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