首页 新闻 会员 周边

一个算法问题,,

0
悬赏园豆:20 [已解决问题] 解决于 2017-10-13 02:42

如果有很多(这种规律) 的数字 1  4  9  16 25 

问题:1+4+16 =21

怎么通过21得到  1,4,16 这个几个数,,,

这个算法如何实现

煤炭g的主页 煤炭g | 初学一级 | 园豆:129
提问于:2017-07-14 15:43
< >
分享
最佳答案
0

先从1开始枚举i,当i^2大于n(你读入的数)时跳出并记录i-1,比如读入21时i=5就跳出了,记录一个4,然后重复这个操作直到1

代码如下,

void Function(int k) {
    if (k == 1) {
        printf("1\n");
        return;
    }

    int i;
    for (i = 1; i * i <= k; i++);
    i--;
    Function(k - i * i);
    printf("%d\n", i * i);
}

例如输入21就会输出:

1

4

16

望采纳

收获园豆:20
void_f | 菜鸟二级 |园豆:222 | 2017-10-11 15:32
其他回答(4)
0

同学,题目不说清楚,怎么写答案?

爱编程的大叔 | 园豆:30839 (高人七级) | 2017-07-14 16:04
0

你这个是要循环,还是要得到那个数啊

小西子 | 园豆:72 (初学一级) | 2017-07-14 16:37
0
def calc(x):
    t = int(math.sqrt(x)) #求平方根,然后向下取整
    print t #打印满足条件的值
    y = x - pow(t,2) #返回余数
    return y

st = 21  #欲测试的值
while True:
    ret = calc(st)
    if ret==0: #当余数为0时跳出循环
        break
    st = ret

另外你的问题没有说清楚,一些细节,包括这个结果中的数能否重复等等都没有说明
上面仅仅提供一个思考的思路,需要求多种组合,还需要改善
兰冰点点 | 园豆:401 (菜鸟二级) | 2017-07-14 18:21
0

计算机最强大的功能就是穷举

慧☆星 | 园豆:5640 (大侠五级) | 2017-07-15 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册