题:如果两个不同的正整数,他们的和是他们的积的因子,就称这两个数为兄弟数,小的称为弟数,大的称为兄数。先后输入正整数n,m,n<m
请在这n至m-n+1个数中,找出一对兄弟数。如果找不到,就输出“no solution”。如果能找到就输出最小的那一对;如果有多对兄弟数和相同且
都是最小,就找出弟数最小的那一对。
分析:枚举每一对不同的数,看看是不是兄弟数。用两个变量记录当前已经找到的最佳兄弟数,如果发现最佳的,就重新记录。
#include <iostream>
using namespace std;
int main()
{
int m,n;
int a = m+1;int b = m+1; //a(弟数),b(兄数)记录最佳兄弟数,a,b暂且初始为为最大值
cin>>n>>m;
for (int i=n;i<m;++i){//取弟数
if(i>=(a+b)/2+1) break;//当小的数大于(a+b)/2+1),没必要再进行枚举了,此时跳出外层循环for(int j=i+1;j<=m;++j){//取兄数
if(i+j>=a+b) break;//当枚举到的i,j之和大于a+b时,跳出内层循环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<<"not solution"<<endl;
}else{
cout<<a<<','<<b<<endl;
}
return 0;
}