剖析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

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin