剖析SQLsever之01-百钱白鸡-C/sqlsever存储过程

2023-11-11 12:40

本文主要是介绍剖析SQLsever之01-百钱白鸡-C/sqlsever存储过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目及分析原链接如下:
http://c.biancheng.net/view/500.html
参考链接:https://www.cnblogs.com/huangxincheng/archive/2012/08/05/2624156.html

1.1、问题如下:

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

1.2.、题目分析

如果用数学的方法解决百钱买百鸡问题,可将该问题抽象成方程式组。设公鸡 x 只,母鸡 y 只,小鸡 z 只,得到以下方程式组:
A:5x+3y+1/3z = 100
B:x+y+z = 100
C:0 <= x <= 100
D:0 <= y <= 100
E:0 <= z <= 100

如果用解方程的方式解这道题需要进行多次猜解,计算机的一个优势就是计算速度特别暴力并且无怨无悔,所以我们可以欺负她、蹂躏她!因此我们用穷举法的方式来解题,需要 101^3 次猜解,但对于计算机来说,小 CASE!

1.3、代码如下

1.3.1、C语言

方法一:时间复杂度为 O(n^3)

// hundred chickens.cpp : Defines the entry point for the console application.
//#include "stdafx.h"int main(int argc, char* argv[])
{printf("百元买百鸡的问题所有可能的解如下:\n");int cock,hen,chicken;for( cock=0; cock<21; cock++)for( hen=0; hen<34; hen++)for ( chicken=0; chicken<300; chicken++)if( cock*5+hen*3+chicken/3==100 && cock+hen+chicken==100 && chicken%3==0 )printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", cock, hen, chicken);return 0;
}

方法二:时间复杂度为 O(n^2)

// hundred chickens.cpp : Defines the entry point for the console application.
//#include "stdafx.h"int main(int argc, char* argv[])
{printf("百元买百鸡的问题所有可能的解如下:\n");int cock,hen,chicken;chicken=0;for( cock=0; cock<21; cock++)for( hen=0; hen<34; hen++) {chicken = 100-cock-hen;if( cock*5+hen*3+chicken/3==100 && chicken%3==0 )printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", cock, hen, chicken);}return 0;
}

方法三:时间复杂度为O(n)
从结果中我们可以发现这样的一个规律:公鸡是4的倍数,母鸡是7的递减率,小鸡是3的递增率,规律哪里来,肯定需要我们推算一下这个不定方程。

x+y+z=100          ①
5x+3y+z/3=100    ②

令②*3-① 可得

7x+4y=100
=>y=25-(7/4)x          ③

又因为0<y<100的自然数,则可令

 x=4k                    ④

将④代入③可得
=> y=25-7k ⑤

将④⑤代入①可知
=> z=75+3k ⑥

要保证0<=x,y,z<100的话,k的取值范围只能是1,2,3,4,下面我们继续上代码。

// hundred chickens.cpp : Defines the entry point for the console application.
//#include "stdafx.h"int main(int argc, char* argv[])
{printf("百元买百鸡的问题所有可能的解如下:\n");int cock,hen,chicken,k;cock=hen=chicken=k=0;for(k=0; k<5; k++){cock = 4*k;hen = 25-7*k;chicken = 75+3*k;printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", cock, hen, chicken);}return 0;
}

输出:
在这里插入图片描述

1.2、sqlsever存储过程

方法一:等同于C语言,方法三

print '百元买百鸡的问题所有可能的解如下:'declare @cock int,@hen int,@chicken int,@k int
--cock:公鸡 hen:母鸡 chicken:小鸡 
set @cock=0
set @hen=0
set @chicken=0
set @k=0
while @k<5
beginset @cock=4*@kselect @hen=25-7*@kselect @chicken=75+3*@kselect @k=@k+1print @cockprint @henprint @chicken
end

方法二:暴力穷举—额,太慢了,跑了很久都没有结果

--百钱买鸡
/*
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;
百钱买百鸡,则翁、母、雏各几何?
*/print '百元买百鸡的问题所有可能的解如下:'declare @cock int,@hen int,@chicken int,@sum int,@money int
--cock:公鸡 hen:母鸡 chicken:小鸡 sum:鸡的总数 money:买sum只鸡所花的钱
set @cock=0
set @hen=0
set @chicken=0
set @sum=0
set @money=0
while @cock<=20 
beginwhile @hen<34beginwhile @chicken<=100beginselect @money=5*@cock+3*@hen+@chicken/3select @sum=@cock+@hen+@chickenif(@money=100 and @sum=100)beginprint '公鸡='+@cockprint '母鸡='+@henprint '小鸡='+@chickenendendend
end

这篇关于剖析SQLsever之01-百钱白鸡-C/sqlsever存储过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390126

相关文章

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal