小刘的周记第一周之百鸡问题

 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?

思路:

  • 在不甚思考的情况下(每种鸡都可能有0-100只)凭直觉写出蛮力法求解百鸡问题的基本思路并编程实现

设鸡翁为x,鸡母为y,鸡雏为z

x=0 x<=100  循环一

y=0 y<=100  循环二

z=0 z<=100  循环三

X+y+z=100&&3x+5y+z/3==100&&z%3==0?

Yes:输出xyz

No:循环

  • 缩小三种鸡数量可能的范围,优化算法,减少计算量,此时算法复杂度减少

鸡翁百钱最多买20只,鸡母最多买33只,鸡雏最多100只

X<=20

Y<=33

Z<=100

  • 进一步优化算法,降低算法的复杂度

直接令z=100-x-y,取消一层循环

代码如下:

#include<stdio.h>
int main(){
	int x,y,z;
printf("设鸡翁为x,鸡母为y,鸡雏为z\n"); 
	for(x=0;x<=20;x++){
		for(y=0;y<=33;y++){
			z=100-x-y;
			if(5*x+3*y+(100-x-y)/3==100&&z%3==0){
				printf("x=%d ",x);
				printf("y=%d ",y);
				printf("z=%d\n",z);
			}
			else{
				continue;
			}
		}
	}
}

 运行结果截图:

 调整输入规模(如1000鸡1000钱问题、2000鸡2000钱问题等),观察并记录5组(每组多次运行取平均值)不同输入规模下任务1和任务3算法的运行时间:

小刘的实验总结:

(1)为什么不使用时间单位来表示时间复杂度。

因为用不同的计算机对同一种算法的程序的运行的时间也会不同,因此时间单位并不能准确的表示时间复杂度。时间复杂度理论旨在量化算法的内在时间需求,也就是算法对任何计算机的基本时间约束。

(2)对不同量级时间复杂度的直观认识。

对于O(logn)、O(n)、O(n^2)这三种复杂度来说,由他们的图像可知,n越大,他们相差就越大,O(logn)的程序所用时间相对于O(n)、O(n^2)这两种复杂度的程序就会快很多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值