本专栏主要基于北大郭炜老师的程序设计与算法系列课程进行整理,包括课程笔记和OJ作业。该系列课程有三部分: (一) 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


5331

被折叠的 条评论
为什么被折叠?



