兄弟数(break的使用)


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


思路:枚举每一对不同的数,看看是不是兄弟数。用两个变量记录当前已经找到的最佳兄弟数,如果发现更佳的,就更新记录。

最佳写法

#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){//取弟数 
		if( i > (a+b)/2 + 1)
			break; //跳出外重循环 
		for ( int j = i+1;j<=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;
}

洛(ruo)基(ji)写法

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	int n,m;
	cin >> n >> m ;
	int a=m+1,b=m+1;	
	for(int i=n;i<=m;++i){
		for(int j=i+1;j<=m;j++){
			if(i*j%(i+j)==0){
				if(a+b>i+j){
					a=i;
					b=j;
				}
				else if(a+b==i+j && a>i){ // 
					a=i;
					b=j;
				}
			}
		}
	}
	if(a==m+1)
		cout<<"No solution.";
	else
		cout<< a<<" "<<b;
	return 0;
}

虽然两个代码,都可以得到正确结果,但是,代码执行时间,大约差了一倍,简直“致命”。
阿西吧

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值