【杭电oj2040】亲和数

本文介绍了一种通过编程判断两个数是否为亲和数的方法。亲和数是指两个数中任意一个数都是另一个数真约数之和的情况,如220与284。文章提供了一个具体的C语言实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

亲和数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 33760    Accepted Submission(s): 20465


Problem Description

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 

1+2+4+5+10+11+20+22+44+55+110=284。 

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。 

你的任务就编写一个程序,判断给定的两个数是否是亲和数
 

Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 ;
 

Output
对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。
 

Sample Input
  
2 220 284 100 200
 

Sample Output
  
YES NO
 

Author
linle
 

Source
 

Recommend
lcy   |   We have carefully selected several similar problems for you:   2042  2048  2044  2046  2050 
 
#include<stdio.h>
int main() {
    int n;
    scanf("%d",&n);
    while(n--) {
        int a,b,sum1=0,sum2=0;
        scanf("%d %d",&a,&b);
        for(int l=1; l<=a/2; l++)
            if(a%l==0)
                sum1+=l;
        for(int l=1; l<=b/2; l++)
            if(b%l==0)
                sum2+=l;
        if(sum1==b&&sum2==a)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}


<think>嗯,用户想知道在杭电OJ(HDOJ)的第100题中,也就是题号从2000到2099之间,哪道题开始涉及到结构体排序。首先,我需要回忆一下这些题目的内容,或者查找相关资料。 结构体排序通常涉及到自定义排序规则,比如按照多个条件对结构体中的字段进行排序。在编程题中,这类问题常见于需要对一组数据进行特定规则排序的情况,比如学生成绩按分数和姓名排序,或者事件按时间排序等。 接下来,我需要回顾HDOJ的题目列表,特别是2000到2099题号范围内的题目。可能需要逐个查看这些题目,找出需要结构体排序的题目。不过,由于记忆有限,可能需要借助以往的解题经验或者在线资源来确认。 比如,HDOJ 2020题是绝对值排序,但这里可能只需要对数值进行绝对值处理后再排序,可能不需要结构体。HDOJ 2033题是关于时间相加的,可能也不涉及结构体。HDOJ 2040题是和数,可能也不涉及排序。 再往后的题目中,HDOJ 2076题是计算夹角,可能不需要结构体。HDOJ 2093题是考试排名,这个题目可能需要结构体,因为需要处理学生的多个属性(解题数和罚时),并根据这些属性进行排序。这可能是一个需要结构体排序的题目。 不过,我需要进一步确认题号。比如,HDOJ 2093的题目描述是否真的需要结构体。根据回忆,考试排名问题通常要求按解题数目从多到少,再按罚时从少到多排序,这就需要定义一个结构体存储每个学生的信息,然后自定义比较函数进行排序。因此,HDOJ 2093可能是一个涉及结构体排序的题目。 此外,HDOJ 2023题是求平均成绩,可能需要结构体来存储学生和课程的信息,但可能不需要排序。而HDOJ 2052题是图像旋转,可能不需要结构体。HDOJ 2065题是"红色病毒"问题,属于数学或递推,也不涉及结构体。 因此,在2000到2099范围内,HDOJ 2093可能是第一个需要结构体排序的题目。当然,可能还有其他题目更早涉及,比如HDOJ 2027统计元音可能需要结构体来存储各个元音的数量,但排序可能不是主要部分。需要进一步确认。 可能还需要检查HDOJ 2000到2099的列表,例如HDOJ 2039题是判断三角形,可能不需要结构体。HDOJ 2043题是密码安全性检查,也不涉及结构体。HDOJ 2054题是大数比较,可能也不需要结构体。 综上,HDOJ 2093考试排名应该是这个范围内较早涉及结构体排序的题目。用户可能需要从这道题开始练习结构体排序的应用。</think>在杭电OJ(HDOJ)的 **2000-2099** 题号范围内,涉及结构体排序的典型题目是 **HDOJ 2093(考试排名)**。以下是逐步说明: --- ### **1. 题目背景** **HDOJ 2093(考试排名)** 要求根据学生的比赛成绩进行排名。需要处理以下规则: - **解题数**从高到低排序。 - 若解题数相同,按 **总罚时** 从低到高排序。 - 若解题数和罚时都相同,按 **姓名** 字典序排序。 这种多条件排序需要定义结构体存储学生信息,并自定义排序规则。 --- ### **2. 结构体定义** 首先定义一个结构体存储每个学生的信息: ```cpp struct Student { string name; // 学生姓名 int solved; // 解题数 int penalty; // 总罚时 }; ``` --- ### **3. 自定义排序规则** 在C++中,通过自定义比较函数实现多条件排序: ```cpp bool compare(const Student &a, const Student &b) { if (a.solved != b.solved) { return a.solved > b.solved; // 解题数降序 } else if (a.penalty != b.penalty) { return a.penalty < b.penalty; // 罚时升序 } else { return a.name < b.name; // 姓名字典序升序 } } ``` --- ### **4. 题目关键点** - **输入处理**:需要解析每行输入中的解题时间和罚时。 - **数据存储**:使用结构体数组或`vector<Student>`存储所有学生信息。 - **排序调用**:使用`sort()`函数并传入自定义的`compare`函数。 --- ### **5. 其他可能涉及结构体排序的题目** 在2000-2099范围内,以下题目也可能涉及结构体排序: - **HDOJ 2023(求平均成绩)**:可能需要结构体存储学生多门课程的成绩,但排序不是核心。 - **HDOJ 2068(RPG的错排)**:不涉及结构体排序。 - **HDOJ 2080(夹角有多大II)**:无需结构体。 --- ### **总结** 建议从 **HDOJ 2093(考试排名)** 开始练习结构体排序。掌握该题后,可尝试更复杂题目(如多字段排序或动态条件排序)。其他结构体排序的经典题分布在 **2100+** 题号范围(如HDOJ 2138)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值