其他分享
首页 > 其他分享> > P1851 好朋友 (AC)

P1851 好朋友 (AC)

作者:互联网

注意:

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