当前位置: 代码迷 >> 综合 >> break的巧妙时用
  详细解决方案

break的巧妙时用

热度:5   发布时间:2023-10-13 20:00:39.0

题:如果两个不同的正整数,他们的和是他们的积的因子,就称这两个数为兄弟数,小的称为弟数,大的称为兄数。先后输入正整数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;
}
  相关解决方案