循环程序设计

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值