解题思路:
1.设输入的数为a,b;
2.求出a的真约数的和suma;
3.判断suma是否等于b,若不等于直接输出NO,结束;
4.若suma等于b,求出b的真约数的和sumb;
5.判断sumb是否等于a,若等于输出YES,若不等于输出NO;
注意:一个数的约数不会大于这个数的一半,所以循环到a/2,b/2;
参考代码:
#include <stdio.h> void function( int a, int b ); /*-----------------------------------------*/ int main() { int N, a, b; scanf( "%d", &N ); for ( int i = 0; i < N; i++ ) { scanf( "%d%d", &a, &b ); function( a, b ); } return(0); } /*-----------------------------------------*/ void function( int a, int b ) { int suma = 0, sumb = 0; for ( int i = 1; i <= a / 2; i++ ) { if ( a % i == 0 ) suma += i; } if ( suma == b ) { for ( int j = 1; j <= b / 2; j++ ) { if ( b % j == 0 ) sumb += j; } if ( sumb == a ) printf( "YES\n" ); else printf( "NO\n" ); }else printf( "NO\n" ); return; }
别忘点赞哦-.-
0.0分
29 人评分
#include<stdio.h> int main(){ int N; int a,b; int i,j; int sum1=0,sum2=0; scanf("%d",&N); while(N--){ scanf("%d%d",&a,&b); for(i=1;i<=a/2;i++){ if(a%i == 0){ sum1 = i + sum1; } } if(sum1 == b){ for(j=1;j<=b/2;j++){ if(b%j == 0){ sum2 = j + sum2; } } if(sum2 == a) printf("Yes\n"); else printf("No\n"); } printf("No\n"); } return 0; }不知道为什么提交一直错误
int main() { int n,a,b; scanf("%d",&n); while(n--){ int flag; scanf("%d %d",&a,&b); swap(&a,&b); //printf("%d %d ",a,b); if(a%2==0)flag=check1(a,b); else flag=check2(a,b); if(flag==1){if(b%2==0)flag=check1(b,a); else flag=check2(b,a);if(flag==1)printf("YES\n"); } } return 0; }
如果判断奇偶,是否可以减小(n/2-n/3)的循环量? #include<stdio.h> #include<math.h> void swap(int*x,int*y) { int temp; if ((*x)<(*y)){ temp=*x;*x=*y;*y=temp; } } int check1(int a,int b)//a是偶数 { int sum=1; for(int i=2;i<=a/2;i++){ if(a%i==0){ sum+=i; if(sum>b){printf("NO\n");return 0;} } } if(sum==b)return 1;else {printf("NO\n");return 0;} } int check2(int a,int b)//a是奇数 { int sum=1; for(int i=3;i<=a/3;i++){ if(a%i==0){ sum+=i; if(sum>b){printf("NO\n");return 0;} } } if(sum==b)return 1;else {printf("NO\n");return 0;} }
小黄 2018-03-17 23:29:54 |
int main() { int n,a,b; scanf("%d",&n); while(n--){ int flag; scanf("%d %d",&a,&b); swap(&a,&b); //printf("%d %d ",a,b); if(a%2==0)flag=check1(a,b); else flag=check2(a,b); if(flag==1){if(b%2==0)flag=check1(b,a); else flag=check2(b,a);if(flag==1)printf("YES\n"); } } return 0; }
小黄 2018-03-17 23:30:19 |
额 不好看
DARLING·02 2020-03-05 13:47:42 |
#include<iostream> #include<algorithm> using namespace std; int main(void) { int n,x,y; for(cin>>n;n>0;n--){ int sum1=1,sum2=1; cin>>x>>y; for(int i=2;i<=max(x,y)/2;i++){ if(x%i==0&&x!=i) sum1+=i; if(y%i==0&&y!=i) sum2+=i; } if(sum1==y&&sum2==x) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }