ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1851 好朋友 (AC)

2022-06-11 15:35:39  阅读:186  来源: 互联网

标签:约数 AC 朋友 ++ int P1851 取值 死循环


注意:

1.a != b

2.1也是因数

#include <stdio.h>
int main() {

    int n, a, b, s = 1, j = 1;
    scanf("%d", &n);
    a = n - 1;
    while (s != a) {
        a++;
        
        j = 1;
        s = 1;
        for (int i = 2; i < a; i++) {
            if (a % i == 0) {
                j += i;
            }
        }
        b = j;
        for (int i = 2; i < b; i++) {
            if (b % i == 0) {
                s += i;
            }
        }
        if (a == b) {
            a++;
            continue;
        }
    }
    // A the sum of divisors compared to B
    printf("%d %d", a, b);
    return 0;
}

 

原来还不清楚b如何求,甚至还不知道互为“非常好友”的含义

就从1开始,不行,a + 1 开始不行。

后来才知道了题意,加上了互为好友的条件,结果死循环

开始debug,设置变量初始化,a,b的取值, 循环条件修改,代码块顺序变化

看来部分的题解才知道,我的思路是错的

我的思路是a从n开始,b随便到a++,条件是a的约数之和==b,b的约数之和==a,a!=b

但是

大佬的思路是直接不管条件,直接创造条件,直接限制a的约数之和就是=>b(赋值)

这就完全消除了b取值的难度,在之前就疑惑b的取值如何,这就豁然开朗了

 

注意一下循环中关键变量的初始化,搞不好就是死循环

 

代码中的a = n - 1是为了对应循环的判断(此时的a对应此时的b)

 

后来居然还是a!=b的问题,结果调整了代码的顺序就AC了

 

完美

 

 

标签:约数,AC,朋友,++,int,P1851,取值,死循环
来源: https://www.cnblogs.com/SaberZHT/p/16365984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有