代码打卡(4)——蛮力法

目录

题目内容

题目分析

问题解决

总结


题目内容

1、 完成百元买百鸡

2、串匹配问题 

3、完成求差

4、分数化简 

题目分析

1.百元买百鸡:

目的:求满足公鸡*5+母鸡*3+小鸡/3=100元且公鸡+母鸡+小鸡=100的三种鸡的数目并输出。

思路:(暴力法)三层循环,由于公鸡最多买20只母鸡最多买33只,所以三层循环中公鸡、母鸡分别循环到20和33即可,寻找在范围中符合条件的三种鸡的数目并输出。流程图如下:

2.串匹配:

目的:求主串中子串所在的位置。

思路:从主串S的第index(index起始设置为0)个字符开始,和模式串T的第一个字符进行比较,若相等,则继续比较后续字符;否则回溯到主串S的第index+1个字符开始重新和模式串T进行比较。以此类推,直至模式串T中的每一个字符依次和主串S中的一个连续的字符序列相等,则称模式匹配成功,此时返回模式串T的第一个字符在主串S中的位置;否则主串中没有和模式串相等的字符序列,称模式匹配不成功。

3.求差:

目的:求一维数组:a[0]-a[1]-a[2]-…-a[n];的值

思路:先定义一个存储结果的变量minR,初始化minR=0,因为求差计算只有第一个数是正数,所以先把a[0]赋值给minR,在利用循环遍历i=1到n的数组执行minR=minR-a[i]即可。

4.分数化简:

目的:把一个分数化为最简分数。

思路:找出分子分母中较小的数temp,循环从temp到2寻找分子分母的公约数,并将分子分母分别除以公约数,循环结束后分数即化为最简分数。

问题解决

1.百元买百鸡

算法描述:

算法:求百元买百鸡的情况Chiken()

输入:无

输出:满足条件的三种鸡的数量;

过程:1.定义循环变量i,j,k

      2.初始化循环变量i=0循环变量i从0到20循环执行以下:

         2.1.初始化循环变量j=0循环变量j从0到33循环执行以下:

             2.1.1.初始化循环变量k=0循环变量k从0到100(每次自增3)循环执行以下:

                 如果5*i+3*j+k/3==100&&i+j+k==100

                      输出i,j,k对应的数量。

算法实现:

运行结果:

时间复杂度:三层循环时间复杂度为O(n^3);

优化:在计算第三种鸡时可以用100-x-y计算,这样可以减少一层循环。

2.串匹配:

算法描述:

算法:求子串在主串中的位置getStrand()

输入:主串S,子串T

输出:子串T第一个字符在主串S中的位置

过程:1.定义数组标注位index,主串下标变量i,子串下标变量j,并初始化为0

      2.无限循环直到主串遍历结束或者子串遍历结束执行以下:

         2.1如果字符相等则下标i,j自增1;

2.2如果不相等把标志位index++,并赋给i,j赋值为0

         3.循环结束如果子串遍历完renturn index+1

         4.否则return 0

算法实现:

运行结果:

时间复杂度:最坏情况为循环(m*n)次,最好情况为循环(n)次->时间复杂度为:O(m*n)

3.求差:

算法描述:

算法:求一维数组差:getMinus

输入:长度为n的数组a[]

输出:数组差minR

过程:1.定义变量minR储存差值并初始化为0

      2.将a[0]赋值给minR

      3.定义循环变量i=1,循环变量i从1到n-1循环执行以下:

        minR=minR-a[i]

      4.输出差值minR

算法实现:

运行结果:

时间复杂度:循环了n-1次,->O(n)

4.分数化简:

算法描述:

算法:化简分数getsimple()

输入:分数的分子a和分母b

输出:化简后的分子a和分母b

过程:1.比较分子和分母大小,将将小数赋值给a把大数赋值给b

      2.设置标志位lable判断a b的值是否有换位置

      3.定义变量temp储存较小值

      4.定义循环变量i,循环变量i从temp到2执行以下:

        4.1若a%i==0&b%i==0

            4.1.1 a=a/i;b=b/i;

      5.判断lable,输出a,b值

算法实现:

运行结果:

时间复杂度:循环了temp次->O(n)

总结

蛮力思路清晰简单,便于读者理解,便于实现,把一个问题实现的所有情况都列举出来,选择符合条件的情况,类似于数学中的穷举法。缺点是:代码运行的时间较长,时间复杂度较高,代码效率较低,适合规模较小的问题。对于百元买百鸡:在计算第三种鸡时可以用100-x-y计算,这样可以减少一层循环。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值