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