首页 > 编程语言 >算法速通-90题(1—完数难题)[含pyhton,java,c++]

算法速通-90题(1—完数难题)[含pyhton,java,c++]

时间:2024-09-27 19:21:28浏览次数:3  
标签:count java 速通 int sum list 整数 c++ main

题目:完数难题

  题目描述如下: 

      小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 1 的正整数的所有因子之和等于它的本身,则称这个数是完数

      比如 6,28 都是完数:6=1+2+3 ; 28=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮帮他

   输入输出格式
   输入格式
   输入包含两个正整数 n1 和 n2 ,表示题目描述中的数据范围。
  正整数之间以空格间隔。
   输出格式
  针对输入,请打印出 n1 和 n2 之间(包括边界)存在的完数个数 

  • 1.下面是python的做法:

count = 0
n,m=map(int,input("").split())
for i in range(n,m+1):
    list = []
    for j in range(1,i):
        if i % j==0:
            list.append(j)
    if sum(list) == i :
        count+=1
print(count)

运行出来可以得到输入的2个数之间的数有多少个符合完整数要求的数

  1. 读取用户输入的两个整数n和m,使用map函数将输入的字符串转换为整数。
  2. 初始化一个名为count的变量,用于记录完全数的数量。
  3. 使用一个for循环遍历从n到m的所有整数。
  4. 对于每个整数i,初始化一个名为list的空列表,用于存储i的所有因子。
  5. 使用另一个for循环遍历从1到i-1的所有整数j,检查j是否是i的因子(即i能被j整除)。如果是,将j添加到list中。
  6. 如果list中所有元素的和等于i,说明i是一个完全数,将count加1。
  7. 循环结束后,输出count的值,即在n和m之间的完全数的数量

    2.下面是java的做法:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int count = 0;
        for (int i = n; i <= m; i++) {
            int sum = 0;
            for (int j = 1; j < i; j++) {
                if (i % j == 0) {
                    sum += j;
                }
            }
            if (sum == i) {
                count++;
            }
        }
        System.out.println(count);
    }
}

和上面的同理:运行出来可以得到输入的2个数之间的数有多少个符合完整数要求的数

  1. 导入Scanner类,用于从控制台读取用户输入。
  2. 定义一个名为Main的公共类,包含一个main方法,作为程序的入口点。
  3. 在main方法中,创建一个Scanner对象,用于读取用户输入的两个整数n和m。
  4. 初始化一个名为count的变量,用于记录完全数的数量。
  5. 使用一个for循环遍历从n到m的所有整数。
  6. 对于每个整数i,初始化一个名为sum的变量,用于存储i的所有因子之和。
  7. 使用另一个for循环遍历从1到i-1的所有整数j,检查j是否是i的因子(即i能被j整除)。如果是,将j添加到sum中。
  8. 如果sum等于i,说明i是一个完全数,将count加1。
  9. 循环结束后,输出count的值,即在n和m之间的完全数的数量。

                                3..下面是c++的做法:

#include <iostream>
#include <vector>

int main() {
    int count = 0;
    int n, m;
    std::cin >> n >> m;
    for (int i = n; i <= m; i++) {
        std::vector<int> factors;
        for (int j = 1; j < i; j++) {
            if (i % j == 0) {
                factors.push_back(j);
            }
        }
        int sum = 0;
        for (int factor : factors) {
            sum += factor;
        }
        if (sum == i) {
            count++;
        }
    }
    std::cout << count << std::endl;
    return 0;
}
  1.  C++代码首先包含了必要的头文件,然后定义了一个名为main的函数。
  2. main函数中,我们首先初始化计数器  count为0,然后从标准输入读取两个整数nm
  3. 接下来,我们使用一个循环遍历范围[n, m]内的每个整数i。对于每个整数i,我们创建一个名为factors的向量来存储它的因子。
  4. 然后,我们使用另一个循环遍历1到i-1之间的所有整数j,如果i可以被j整除,就将j添加到factors向量中。
  5. 接着,我们计算factors向量中所有元素的和,并将其与i进行比较。如果它们的和相等,说明i是一个完全数,我们将计数器count加1。
  6. 最后,我们将计数器的值输出到标准输出。

标签:count,java,速通,int,sum,list,整数,c++,main
From: https://blog.csdn.net/weixin_49600177/article/details/142593355

相关文章

  • java集合
    Collection(单列集合):List有序可重复:vector数组结构 线程安全加了锁  :Arraylist数组结构 不安全未加锁:LinkedList链表结构(双向链表)不安全:Set无序唯一:HashSe......
  • 广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
    ​ 【题目描述】已知nn个整数x1,x2,……xn以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别得到一系列的和。例如当n=4, k=34个整数分别为3,7,12,193,7,12,19时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34现在,要求你计......
  • Java中有哪些集合类?常用的几种java集合类总结 详细解读 Java 的集合类
    Java提供了丰富的数据结构选择,用以处理和存储对象,这些对象通过Java的集合类框架(JavaCollectionsFramework)来组织和管理。集合类使得开发者能够更加高效地处理数据,如排序、搜索、迭代等操作。本文将系统地介绍Java的集合类,包括其核心接口、常用实现类以及使用示例。......
  • 事件【JavaScript】
    1.事件事件是用户或浏览器动作的表示,JavaScript中的一切交互都是通过事件来处理的。2. 事件冒泡(EventBubbling)事件冒泡是指事件从最具体的元素(即触发事件的元素)开始触发,然后逐级向上传播到较为不具体的元素(即该元素的父元素、祖先元素),直到到达最顶层的元素(通常是documen......
  • C++ 智能指针详解: std::unique_ptr 和 std::shared_ptr
    C++11引入了智能指针,它们是管理动态分配内存的强大工具。本文将详细介绍两种最常用的智能指针:std::unique_ptr和std::shared_ptr。std::unique_ptr概述std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_......
  • C++17 std::variant 详解:概念、用法和实现细节
    std::variant是C++17引入的一个新的标准库类型,它提供了一种类型安全的联合体。这个类可以在同一时间持有几种可能类型中的一个值。本文将详细介绍std::variant的概念、用法和实现细节。1.基本概念std::variant是一个模板类,可以存储几种不同类型中的一个值。它的声明如下:te......
  • Java基础语法测试
    classEnumTest{publicstaticvoidmain(String[]args){Sizes=Size.SMALL;Sizet=Size.LARGE;System.out.println(s==t);//falseSystem.out.println(s.getClass().isPrimitive());Sizeu=Size.valueOf("SMALL");System.out.println......
  • java计算机毕业设计五邑大学超市网上销售软件设计(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和电子商务的普及,高校内部超市的传统经营模式正面临前所未有的挑战与机遇。五邑大学作为一所充满活力的高等学府,其师生群体对......
  • C++离线查询
    前言C++算法与数据结构打开打包代码的方法兼述单元测试概念及原理离线算法(offlinealgorithms),离线计算就是在计算开始前已知所有输入数据,输入数据不会产生变化,且在解决一个问题后就要立即得出结果的前提下进行的计算。通俗的说:离线查询:问完所有问题后,依次回答。可......
  • 计算机毕业设计推荐-基于Java的班级学生签到管理小程序 校园课程管理小程序【源码+讲
    精彩专栏推荐订阅:在下方专栏......