寻找兄弟数
描述
例题 :如果两个不同的正整数 ,他们和是积因子就称这为兄弟数 ,小的称大。先后输入正整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后面括号里用于判断的是两个等号,为了这个破等号,害我浪费半天时间