韩信点兵 鸡兔同笼2021.10.10

本文介绍了C语言中不同类型的循环控制,包括break、使用标志变量、goto和exit(0),并结合鸡兔同笼问题展示了如何通过循环解决实际问题。文章通过两种方法展示了穷举法求解鸡兔同笼问题,优化了解决方案的效率。

一、break

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n;
    for(i = 1; ;i++)
    {
         if(i%5==1&& i%6==5 && i%7==4 && i%11==10)
         {
             printf("i=%d\n",i);

             break;
         }

    }

    return 0;
}
 

二、使用标志变量,使可读性更好

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n;
    int x=0;
    for(i = 1;!x;i++)
    {
         if(i%5==1&& i%6==5 && i%7==4 && i%11==10)
         {
             printf("i=%d\n",i);

             x = 1;
         }

    }

    return 0;
}
 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i=0;
    do{
            i++;
    }
        while(!(i%5==1&& i%6==5 && i%7==4 && i%11==10));

        printf("i=%d\n",i);


    return 0;
}

三、goto指向型语句,直接指向结尾处

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    for(i=1; ;i++)
    {
        if(i%5==1 && i%6==5 && i%7==4 && i%11==10)
        {
            printf("i = %d\n", i);
            goto END;
            }
    }
    END: ;
    return 0;
}
 

四、exit(0) 执行强制返回操作,其参数为0时表示程序正常退出,非0时表示程序出现错误后退出。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    for(i=1; ;i++)
    {
        if(i%5==1 && i%6==5 && i%7==4 && i%11==10)
        {
            printf("i = %d\n", i);
            exit(0);
            }
    }
    return 0;
}
 

若无上限,则会陷入死循环

break 循环立刻终止,从循环语句后的第一条语句开始执行

continue 中断此次循环,开始下次循环

鸡兔同笼问题穷举法求解:

通俗解:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x , y;
    for(x=1;x<=98;x++)
    {
        for(y=1;y<=98;y++)
        {if(x+y==98 && x+2*y==193)
            {printf("鸡有:%d 兔子有:%d\n", x, y);

            }
            }
    }
    return 0;
}
优化解:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x , y;
    for(x=1;x<=98;x++)
    {
        y = 98-x;
        if(x+2*y==193)
            {printf("鸡有:%d 兔子有:%d\n", x, y);

            }

    }
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值