与大家阔别了一周,我又来分享算法题了,这次是一道相对来说简单的算法题,我将会分享我的思维和代码,希望大家能够喜欢!
首先呈现题目
1.我们先来分析题目,需要输入M行数据,第一行输入的数据决定了接下来需要输入几行
scanf("%d",&M);
for(int i=0;i<M;i++){
scanf("%d %d",&A,&B);
运用for循环来决定接下来需要输入几行
接下来需要求其中一个真约数(除它本身以外)的和
int sum=0;
int add=0;
for(int j=1;j<A;j++){
if(A%j==0)
sum=sum+j;
}
for(int j=1;j<B;j++){
if(B%j==0)
add=add+j;
}
同样运用for循环从1开始遍历找出约数,一直到本身的前一个,通过本身和i作比较看是否有余数,如果没有则为约数
3.最后进行判断两者中是否有其中一个数是另一个数的真约数之和(注意:一个或者两者都是对方的真约数)
if(sum==B&&add==A)
printf("YES\n");
else
printf("NO\n");
附上完整代码:
#include <stdio.h>
int main(){
int M,A,B;
scanf("%d",&M);
for(int i=0;i<M;i++){
scanf("%d %d",&A,&B);
int sum=0;
int add=0;
for(int j=1;j<A;j++){
if(A%j==0)
sum=sum+j;
}
for(int j=1;j<B;j++){
if(B%j==0)
add=add+j;
}
if(sum==B&&add==A)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
简单的代码就完成了,大家可以根据思路写出更为简洁的代码,如有好的方法也可与博主进行交流,欢迎大家对本篇博客提出宝贵的建议!