算法学习-2

来源:互联网 发布:七月算法 编辑:程序博客网 时间:2024/06/14 02:17
题目要求: 一个数如果恰好等于它的因子之和(包括1, 但不包括这个数本身), 这个数就称为”完数”. 例如28的因子为1,2,4,7,14, 而28=1+2+4+7+14. 因此28是”wan'shu”完数. 编写算法找出1000之内的所有完数, 并按下面格式输出其因子: 28 it’s factors are 1,2,4,7,14. 
算法设计:
C
#define MAX_SIZE (128)
int main(int argc, const char * argv[])
{
    int factors[MAX_SIZE] = {0}, index = 0, num = 0;
    // 顶层循环
    for (int count = 1; count <= 1000; ++count)
    {
// 计算因子
        for (int factor = count/2; factor > 0; --factor)
        {
            if (count % factor == 0)
            {
// 存储并累加因子
                factors[index++] = factor;
                num += factor;
            }
        }
// 是否为完数
        if (num == count)
        {
            printf("%4d it's factors are ", count);
            for (int tempIndex = 0; tempIndex < index - 1; ++tempIndex)
                printf("%3d, ", factors[tempIndex]);
            printf("%3d\n", factors[index - 1]);
        }
        index = num = 0;
    }
    
    return 0;
}


C++
int main(int argc, const char * argv[])
{
    std::vector<int> factors{};
    for (int count = 2; count <= 1000; ++count)
    {
        int num = 0;
        for (int facotr = count/2; facotr > 0; --facotr)
        {
            if (count % facotr == 0)
            {
                factors.push_back(facotr);
                num += facotr;
            }
        }
        if (num == count)
        {
   // 设置字段宽度
            std::cout.width(3);
            std::cout << count << " it's factors are ";
            for (int each : factors)
            {
                std::cout.width(3);
                std::cout << each << ", ";
            }
            std::cout << std::endl;
        }
        factors.clear();
    }
    
    return 0;
}


Python
def Main():
    # 创建列表
    arr = list()
    for count in range(2, 1000 + 1):
        num = 0
        # 查找因子
        for factor in range(count//2, 0, -1):
            if count % factor == 0:
                arr.append(factor)
                num += factor
        # 如是完数则输出
        if num == count:
            print("%3d it's factors are " % count, end = '')
            for index in range(len(arr)):    
                print('%3d, ' % arr[index], end = '')
            print()
        num = 0

        arr.clear()


0 0
原创粉丝点击