Manchester


私信TA

用户名:wenyajie

访问量:312912

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62767
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#include <stdio.h>
int s(int n)
{
	int i,sum=0;
	for ( i=1; i<=n/2; i++ )
	{
		if ( n%i==0 )
			sum+=i;	
	}
	return sum;
}
int main()
{
	int a,b;
	int m;
	scanf("%d",&m);
	while (m--)
	{
		scanf("%d %d",&a,&b);
		printf("%s\n",b==s(a)&&a==s(b)?"YES":"NO");
	}
}
2022-01-27 16:01:14
找约数的时候循环到这个数的sqrt就行了。。
2020-12-17 09:22:29
#include<stdio.h>
int jisuan(int s)
{
	int j,sum=0;
	for(j=1;j<s;j++)
	{
		if((s%j)==0)sum+=j;
	}
	return sum;
}
int main()
{
    int a[100],b[100],m,i;
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        scanf("%d%d",&a[i],&b[i]);
    }
    for(i=0;i<m;i++)
    {
		if((a[i]==jisuan(b[i]))&&(b[i]==jisuan(a[i])))printf("Yes\n");
		else printf("No\n");
    }
    return 0;
}
为什么显示答案错误啊,求教
2020-11-09 22:14:05
#include<stdio.h>
#include<math.h>
int main()
{
    int m,i,j,n,a,b,sum=1,sum1=1;
    scanf("%d",&m);
    for(n=0;n<m;n++)
    {
        scanf("%d%d",&a,&b);
        for(i=2;i<sqrt(a);i++)
        {
            if(a%i==0)
                sum+=i+a/i;
        }
        if(sqrt(a)*sqrt(a)==a)
            sum=sum+sqrt(a);
        for(j=2;j<sqrt(b);j++){
            if(b%j==0)
            sum1+=j+b/j;}
            if(sqrt(b)*sqrt(b)==b)
                sum1=sum1+sqrt(b);
        if(sum==b&&sum1==a)
            printf("YES");
        else
            printf("NO");
    }
    return 0;
哪有问题?
2019-12-03 19:40:14
思路很清晰,12 16这一对就过不了,编写风格值得我学习。
2019-10-31 11:12:22
你输出不符合要求
2019-06-04 10:19:02
一个数的真约数不会大于这个数的一半
2019-05-07 20:27:16
#include<stdio.h>
int main (){
int m,a,b,i,sum,sum2;
sum=0;
scanf("%d",&m);
while (m!=0){
scanf("%d%d",&a,&b);
if (a>=0&&b<=600000){
for (i=1;i<b;i++){
	if (b%i==0)
		sum+=i;
}
for (i=1;i<b;i++)
{
if (a%i==0)
sum2+=i;
}
}
if (sum==a||sum2==b)
printf ("YES\n");
else 
printf ("NO\n");
sum=sum2=0;
m--;

}

return 0;
}     这个正确的答案。但是可能比较繁琐
2018-11-17 17:14:03