1.计数循环
for(表达式1;表达式2;表达式3)表达式1设置初始条件,只执行一次,可以为0、1或多个变量设置初值执行;表达式2为条件,判断循环;表达式3为调整器,使变量增值。表达式1可省略,此时应在for语句之前给循环变量赋初值,分号不可省略。表达式2也可省略,即循环无终止。表达式3也可省略,另设法使循环结束。同时省略表达式1、3,此时相当于while语句;三个表达式同时省略就相当于while(1)。表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式,表达式3也可以是与循环控制无关的任意表达式。
循环控制行、循环变量、循环体、循环周期。
如果循环变量是取几个值且无明确的变化规律,C++11中引入了范围for循环。列如:for (int i : {1,9,6,8,3})。第一个循环周期为1,第二个循环周期为9……共执行了5个循环周期。
当出现无限循环和死循环时,可以在键盘上输入特殊命令来中断程序执行并强制退出。在window下,可以输入ctrl+c或在任务管理器中终止程序。
逗号表达式:由一连串基本表达式组成,基本表达式之间用逗号分开。逗号表达式的执行从第一个基本表达式开始,依次执行,直到最后一个基本表达式。逗号表达式的值是最后一个基本表达式的值。逗号运算符是所有运算符中优先级最低的。
2.break和continue语句
3.基于哨兵的循环
while(表达式) do
{ {
语句; 语句;
} }while(表达式);
while表达式第一次的值为“真”时,两种循环结果相同,否则不同。
4.枚举法
例:ABCD*E=DCBA。其中,A、B、C、D分别代表不同的数字
方法1:
#include<iostream>
using namespace std;
int main()
{
int A,B,C,D,E,num1,num2;
for(A=1;A<=9;A++)
{
for(B=0;B<=9;B++)
{
if(A==B) continue;
for(C=0;C<=9;C++)
{
if(C==A||C==B) continue;
for(D=1;D<=9;D++)
{
if(D==A||D==B||D==C) continue;
for(E=2;E<=9;E++)
{
if(E==A||E==B||E==C||E==D) continue;
num1=A*1000+B*100+C*10+D;
num2=D*1000+C*100+B*10+A;
if(num1*E==num2)
cout<<num1<<'*'<<E<<'='<<num2<<endl;
}
}
}
}
}
return 0;
}
方法2:
#include<iostream>
using namespace std;
int main()
{
int A,B,C,D,E,num1,num2;
for(num1=1023;num1<9876;num1++)
{
A=num1/1000;
B=num1%1000/100;
C=num1%100/10;
D=num1%10;
if(D==0||A==B||A==C||A==D||B==C||B==D||C==D) continue;
num2=D*1000+C*100+B*10+A;
for(E=2;E<9;E++)
{
if(E==A||E==B||E==C||E==D) continue;
if(num1*E==num2)
cout<<num1<<'*'<<E<<'='<<num2<<endl;
}
}
return 0;
}
5.贪婪法
在求解过程的每一阶段都选取一个在该阶段看似最优的解,最后将所以阶段结合形成全局解,并不是对所有问题都能形成最优解。
例如:硬币找零问题。假设有面值为1分、2分、5分和1角的硬币,问最少需要多少个硬币来找出K分钱的零钱。
#include<iostream>
using namespace std;
#define ONEFEN 1
#define TWOFEN 2
#define FIVEFEN 5
#define ONEJIAO 10
int main()
{
int money;
int onefen=0,twofen=0,fivefen=0,onejiao=0;
cin>>money;
if(money>=ONEJIAO)
{
onejiao=money/ONEJIAO;
money%=ONEJIAO;
}
if(money>=FIVEFEN)
{
fivefen=1;
money-=FIVEFEN;
}
if(money>=TWOFEN)
{
twofen=money/TWOFEN;
money%=TWOFEN;
}
if(money>=ONEFEN)
onefen=1;
cout<<onejiao<<" "<<fivefen<<" "<<twofen<<" "<<onefen<<endl;
return 0;
}