程序设计与算法 | (7) break, continue及循环例题

本专栏主要基于北大郭炜老师的程序设计与算法系列课程进行整理,包括课程笔记和OJ作业。该系列课程有三部分: (一) C语言程序设计;(二) 算法基础;(三) C++面向对象程序设计

(一) C语言程序设计 课程链接

1. 循环结构之break语句、continue语句

break语句
  • 可以出现在循环体中(for、while、do…while循环均可),
    其作用是跳出循环。
int n = 0; 
while(true) {
   
   
	if( n > 100)
		break;
	++n; 
}
cout << n ; //101
  • 在多重循环的情况下,break语句只能跳出直接包含它的那一重循环.

  • 如果两个不同的正整数,他们的和是他们的积的因子,就称这两个数为兄弟数,小的称为弟数,大的称为兄数。先后输入正整数n和m(n < m) , 请在n至m这m-n+1个数中,找出一对兄弟数。如果找不到,就输出“No Solution.”。如果能找到,就找出和最小的那一对;如果有多对兄弟数和相同且都是最小,就找出弟数最小的那一对。
    思路:在n-m中枚举每一对不同的数,看看是不是兄弟数。用两个变量记录当前已经找到的最佳兄弟数,如果发现更佳的,就重新记录(可以使用break加速枚举)。

 
#include <iostream>
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; 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) //初始的a 没有被更新过 即没找到兄弟数
		cout<<"No solution.";
	else
		cout<<a<<","<<b;
	return 0;
continue语句
  • 可以出现在循环体中(for、while、do…while循环均可), 其作用是立即结束本次循环,并回到循环开头判断是否要进行下一次循环。
for( int i = 1;i <= 10 ;++i ) {
   
   
   if( i % 2 ) //奇数 非0为true
	  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值