寻找兄弟数

描述

例题 :如果两个不同的正整数 ,他们和是积因子就称这为兄弟数 ,小的称大。先后输入正整n和m(n < m) , m(n < m) , m(n < m) , m(n < m) , m(n < m) , m(n < m) , 请 在n至m这m-n+1 个数中,找出一对兄弟。如果不到就输“ No Solution. Solution. ”。如果能找到,就出和最小的那一对;有多兄弟数相 同且都是最小,就找出弟数的那一对。

思路:

枚举每一对不同的数,看是兄弟。用两个变量记录当前已 经

mycode

# include <iostream>
# include <cstdio>
# include <math.h>
using namespace std;
int main()
{
	int n,m,sum,product,b,s,z=100000;//product是乘积 
	bool panduan=false;
	scanf("%d %d",&n,&m);
	if(n>m)
	{
		int u;
		u=n;
		n=m;
		m=u;	
	}

	for(int i=n;i<=m;i++)
	{

		for(int j=i+1;j<=m;j++)
		{

			sum=i+j;
			product=i*j;
			if(product%sum==0)//和是积的因子 
			{
			
				panduan=true;
				if(z>sum)
				{
					b=max(i,j);
					s=min(i,j);
				}
				if(z==sum)
				{
					if(s>min(i,j))
					{
						b=max(i,j);
						s=min(i,j);
					}	
				}			
			}	
		}
		
	}
	if(panduan==false)
	{
		printf("No solution");
	}
	else
	{
		printf("%d %d",s,b);
	}
	
	
	
	
}

例题代码

#include < iostream >
#include<cstdio>
using namespace std ;
int main()
{
    int n,m;
    cin >> n >> m;
    int a = m +1,b=m+1;//a,b记录已经找到的最佳兄弟数,a是弟数,b是兄数
    for(int i =n;i<m;i++)//取弟数,共m-n种取法
    {
        if(i>(a+b)/2+1)
        {
            break;//跳出外层循环
        }
        for(int j=i+1;i<=m;j++)//寻找兄数
        {
            if(i+j>a+b)
            {
                break;//跳出内层循环
            }
            if(i*j%(i+j)==0)//发现兄数
            {
                if(i*j<a*b)//发现更小兄数
                {
                    a=i;//更新兄数
                    b=j;
                }
                else if(i+j==a+b&&i<a)
                {
                    a=i;//更新已找到的最小兄数
                    b=j;
                }
            }
            
        }
    }
    
    if(a==m+1)
    {
        cout<<"No solution"
    }
    else
    {
        cout<< a<<","<<b;    
    }
    return 0;
}

注意

if后面括号里用于判断的是两个等号,为了这个破等号,害我浪费半天时间