当前位置: 首页 > news >正文

C语言:刷题日志(1)

一.阶乘计算升级版

本题要求实现一个打印非负整数阶乘的函数。

其中n是用户传入的参数,其值不超过1000。如果n是非负整数,则该函数必须在一行中打印出n!的值,否则打印“Invalid input”。

首先,知道阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。那么我们先来个简单的阶乘计算吧。


#include<stdio.h>
int Fact(int n)
{if (n <= 1)return 1;elsereturn n * Fact(n - 1);
}
int main()
{int n;scanf("%d", &n);int ret = Fact(n);printf("%d", ret);return 0;
}

 这样,我们就用这段代码来计算一下5的阶乘吧。

我们可以发现我们成功计算了5的阶乘,但我感觉数不够大,想要计算一下100的阶乘。

 我们发现得出的结果居然是0,这明显不是100的阶乘,这是为什么呢?其实原因很明显,就是溢出了,int类型的的数据最大能表示2的16次方减1,然而100的阶乘已经比这个数大了,所以我们就无法正确输出结果,现在题目要求不超过1000,但现在100就已经不行了,我们该怎么解决他呢?

让我们来看一下代码吧! 

#include <stdio.h>void Print_Factorial(const int N)
{char a[3000] = { 0 };//设置一个存放结果的数组int l = 1;//对赋值次数的限制a[0] = 1;//将首元素设置为1if (N < 0)//如果是负数{printf("Invalid input\n");return 0;}for (int i = 2; i <= N; i++)//从2开始进行阶乘{int z = 0;for (int k = 0; k < l; k++)//对数组进行赋值{int t = i * a[k] + z;a[k] = t % 10;z = t / 10;}while (z)//得到进位的数,同时改变下一次上个代码的循环次数{a[l++] = z % 10;z /= 10;}}for (int i = l - 1; i >= 0; i--)//打印结果{printf("%d", a[i]);}
}int main()
{int N;scanf("%d", &N);Print_Factorial(N);return 0;
}

讲解 

我们先举个例子123*12=1476 

 

我们看完这个例子之后我们其实可以用这种方法来推理出他的运算方式 


假设n = 5的阶乘 5! = 1 * 2 * 3 * 4 * 5
i = 2 时 k = 0 k < (l = 1) z = 0t = i * a[0] + z = 2 * 1 + 0 = 2     a[0] = t % 10 = 2 % 10 = 2    z = t / 10 = 2 / 10 = 0
i = 3 时 k = 0 k < (l = 1) z = 0t = i * a[0] + z = 3 * 2 + 0 = 6     a[0] = t % 10 = 6 % 10 = 6    z = t / 10 = 6 / 10 = 0
i = 4 时 k = 0 k < (l = 1) z = 0t = i * a[0] + z = 4 * 6 + 0 = 24    a[0] = t % 10 = 24 % 10 = 4   z = t / 10 = 24 / 10 = 2 由于z != 0进入while循环改变逐渐改变arr[0]arr[1].....的值a[l++] = a[1] = z % 10 = 2 % 10 = 2  z = z / 10 = 2 / 10 = 0
i = 5 时 k = 0 k < (l = 2) z = 0t = i * a[0] + z = 5 * 4 + 0 = 20    a[0] = t % 10 = 20 % 10 = 0   z = t / 10 = 20 / 10 = 2t = i * a[1] + z = 5 * 2 + 2 = 12    a[1] = t % 10 = 12 % 10 = 2   z = t / 10 = 12 / 10 = 1 由于z != 0进入while循环改变逐渐改变arr[0]arr[1].....的值a[l++] = a[2] = z % 10 = 1 % 10 = 1  z = z / 10 = 1 / 10 = 0到这时循环已经结束 由于l++在多次循环之后l=3,而我们所求的结果就是我们在循环期间所改变的arr的值

 看这回我们不只成功的打印了5的阶乘,也成功打印了100的阶乘

二. 然后是几点

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

题目讲解: 

对于题目的描述,我们其实可以发现如果我们将给我们的起始时间去除上100,就是起始的小时模上100得到的就是起始的分钟,这时我们只要将起始分钟加上给我们的流逝分钟再加上小时数乘以60,所得到的就是总的分钟数,当然这时我们让总的分钟数除以60就能得到小时数,然而一天为24小时所以我们需要将小时控制在24小时之内,其实要得到它非常的简单,只需要我们将小时数模上24就可以了,当然求完小时后我们还要求剩余的分钟数,这就很简单了将总的分钟数模上60就能得到剩余的分钟数了,注意如果剩余的分钟数为单个数我们需要进行补零。

#include<stdio.h>
int main()
{int n,m,h,min,H;scanf("%d %d",&n,&m);h=n/100;min=n%100;H=h*60+min+m;printf("%d%02d",(H/60)%24,H%60);}

三.求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:

首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例:

-3 8

输出样例: 

   -3   -2   -1    0    12    3    4    5    67    8
Sum = 30

题目讲解:

根据题目我们知道我们要先找到a到b之间的数,这我们只需要运用for循环即可,将i的初始值设为a,将循环条件设置为i<=b,并让每次循环i都加1,这样我们就成功找到了a到b之间的数,之后我们再看看的输出格式的限制他要求我们每打印5个数就要换行并且当最后一行不满5个数的时候也要进行换行。这样其实我们就可以设置一个计数器count,让每输入一个数count就加一,当count=5的时候将他进行换行处理,并且重新将count赋值为0,之后将所有的数加在一起放到sum里,但是输出还要求我们,如果最后不满5个数也要进行换行,所以在循环结束后,如果剩余的数不足5个,就说明count最后没有被重新赋值为0,我们只需要在循环外进行对count是否等于0的判断,如果不等于零就进行换行,最后在打印a到b之间数的和。

#include<stdio.h>
int main()
{int a,b;scanf("%d %d",&a,&b);int sum=0,count=0;int i,j;for(i=a;i<=b;i++){count++;printf("%5d",i);if(count%5==0){printf("\n");count=0;}sum+=i;}if(count!=0){printf("\n");}printf("Sum = %d",sum);return 0;
}

 四.爬动的蠕虫

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:

输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

输出格式:

在一行中输出蠕虫爬出井的时间,以分钟为单位。

输入样例:

12 3 1

输出样例:

11

题目讲解 

题目其实很好理解,就是一条蠕虫向上爬,每分钟能爬u寸,每次爬完之后会进行一分钟的休息同时下滑d寸。这其实就很好理解了,我们只需要设置一个变量x,如果x小于井的长度就让他加上一分钟爬的u寸,同时时间变量t也要加一,但是题目告诉我们如果爬完之后的高度并没有出井,蠕虫就要休息一分钟,并且下滑d寸,所以我们要设置一个判断如果x爬完的高度依然小于n井高,就让x-d,时间同时也加1,当然如果没有达到井上,蠕虫还要进行爬行,所以我们要将这一次的爬行放入循环中,直到蠕虫爬出井,结束循环并打印所消耗的时间。

#include<stdio.h>
int main()
{int n,d,u;scanf("%d%d%d",&n,&u,&d);int x=0,t=0;while(x<n){x+=u;t++;if(x<n){x-=d;t++;}}printf("%d",t);return 0;
}

五.龟兔赛跑

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:

输入在一行中给出比赛时间T(分钟)。

输出格式:

在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

输入样例:

242

输出样例:

@_@ 726

题目讲解 :

时间

乌龟

兔子

0

0

0

190

570

630

10

30

90

200

600

630

20

60

90

210

630

630

30

90

90

220

660

630

40

120

90

230

690

720

50

150

180

240

720

720

60

180

180

250

750

720

70

210

180

260

780

720

80

240

180

270

810

810

90

270

270

100

300

360

110

330

360

120

360

360

130

390

360

140

420

450

150

450

450

160

480

450

170

510

450

180

540

540

我们通过这个表格可以发现90min为一个周期0min,90min,180min,270min,每到这些时间乌龟和兔子就会相遇,并且我们发现兔子在一个周期上总是在起始时间到十分钟,时间到40分钟到之后的10分钟,时间到80到之后的10分钟,即每个周期的0-10min,40-50min,80-90min,在这些期间内兔子才会运动,而乌龟时一直在运动,所以,我们给出时间可以直接计算出乌龟所运动的路程,

而,兔子所运动的路程我们只要找到总时间在这些时间分段里总共出现了多少分钟即可,每找到一次路程就加9,当然我们要利用while循环让时间不停的前进,并在循环中设置判断条件,既然时90min一周期,只要然时间去模上90,看时间是否在0-10min,40-50min,80-90min之内,每在一次路程就加9。

#include<stdio.h>
int main()
{int tu=0,gui=0,t=0,T;scanf("%d",&T);gui=T*3;while(t<T){if((t%90>=0&&t%90<10)||(t%90>=40&&t%90<50)||(t%90>=80&&t%90<90)){tu+=9;}t++;}if(gui>tu)printf("@_@ %d",gui);else if(tu>gui)printf("^_^ %d",tu);elseprintf("-_- %d",tu);return 0;
}

相关文章:

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数&#xff0c;其值不超过1000。如果n是非负整数&#xff0c;则该函数必须在一行中打印出n!的值&#xff0c;否则打印“Invalid input”。 首先&#xff0c;知道阶乘是所有小于及等于该数的…...

ios私钥证书(p12)导入失败,Windows OpenSSl 1.1.1 下载

ios私钥证书(p12)导入失败 如果你用的OpenSSL版本是v3那么恭喜你V3必然报这个错&#xff0c;解决办法将OpenSSL 3降低成 v1。 Windows OpenSSl 1.1.1 下载 阿里云网盘下载地址&#xff1a;OpenSSL V1...

嵌入式面试经典30问:二

1. 嵌入式系统中&#xff0c;如何选择合适的微控制器或微处理器&#xff1f; 在嵌入式系统中选择合适的微控制器&#xff08;MCU&#xff09;或微处理器&#xff08;MPU&#xff09;时&#xff0c;需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和…...

目标检测-YOLOv1

YOLOv1介绍 YOLOv1&#xff08;You Only Look Once version 1&#xff09;是一种用于目标检测的深度学习算法&#xff0c;由Joseph Redmon等人于2016年提出。它基于单个卷积神经网络&#xff0c;将目标检测任务转化为一个回归问题&#xff0c;通过在图像上划分网格并预测每个网…...

python基础语法八-异常

书接上回&#xff1a; python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 python基础语法七-openpyxl操作excel 1. 异常简介 (1)异常&#xff1a;遇到…...

【堆的应用--C语言版】

前面一节我们都已将堆的结构&#xff08;顺序存储&#xff09;已经实现&#xff0c;对树的相关概念以及知识做了一定的了解。其中我们在实现删除操作和插入操作的时候&#xff0c;我们还同时实现了建大堆&#xff08;小堆&#xff09;的向上&#xff08;下&#xff09;调整算法…...

【微信小程序】搭建项目步骤 + 引入Tdesign UI

目录 创建1个空文件夹&#xff0c;选择下图基础模板 开启/支持sass 创建公共style文件并引入 引入Tdesign UI: 1. 初始化&#xff1a; 2. 安装后&#xff0c;开发工具进行构建&#xff1a; 3. 修改 app.json 4. 使用 5. 自定义主题色 创建1个空文件夹&#xff0c;选择下…...

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 &#xff1a;frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可&#xff0c;不过需要覆盖所有目录下的图片。 由于是静态修改&#xff0c;则需要make一下&#xff0c;重新编译。 2、方法二Overlay方式 由于上述方法有…...

Echarts可视化

echarts是一个基于javascripts的开源可视化图表库 画图步骤&#xff1a; 1.引入echarts.js文件 <script src" https://cdn.jsdelivr.net/npm/echarts5.5.1/dist/echarts.min.js"></script> 也可将文件下载到本地通过src引入。 2. 准备一个呈现图表的…...

验证linux gpu是否可用

通过torch验证 import torchprint(torch.__version__) # 查看torch当前版本号 print(torch.version.cuda) # 编译当前版本的torch使用的cuda版本号 print(torch.cuda.is_available()) # 查看当前cuda是否可用于当前版本的Torch&#xff0c;如果输出True&#xff0c;则表示可…...

JavaScript( 简介)

目录 含义 实例 js代码位置 1 外部引入js文件 2 在 HTML 中&#xff0c;JavaScript 代码必须位于 标签之间。 小结 含义 js是一门脚本语言&#xff0c;能够改变HTML内容 实例 getElementById() 是多个 JavaScript HTML 方法之一。 本例使用该方法来“查找” id"d…...

Linux中的编译器gcc/g++

目录 一、gcc与g的区别 1.gcc编译器使用 2.g编译器使用 二、gcc/g编译器编译源文件过程 1.预处理 2.编译 3.汇编 4.链接 三、静态库和动态库 1.库中的头文件作用 2.静态库 3.动态库 四、gcc编译器的一些选项命令 一、gcc与g的区别 gcc用于编译C语言代码&#xff…...

RK3568安装部署Docker容器

设置华为镜像源 sudo sed -i s/huaweicloud.com/ustc.edu.cn/g /etc/apt/sources.list更新索引 rootok3568:/home/forlinx# sudo apt-get update Hit:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease Hit:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InR…...

Ubuntu 常用指令和作用解析

Ubuntu 常用指令和作用解析 Ubuntu 是一种常见的 Linux 发行版&#xff0c;它利用了 Unix 的力量和开源软件的精神。掌握常用指令可以提高我们在使用 Ubuntu 时的效率。本文将介绍一些常见的指令及其用途。 目录 更新与安装软件文件与目录操作系统信息与资源监控用户与权限管…...

2024国赛数学建模C题完整论文:农作物的种植策略

农作物种植策略优化的数学建模研究&#xff08;完整论文&#xff0c;持续更新&#xff0c;大家持续关注&#xff0c;更新见文末名片 &#xff09; 摘要 在本文中&#xff0c;建立了基于整数规划、动态规划、马尔科夫决策过程、不确定性建模、多目标优化、相关性分析、蒙特卡洛…...

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例&#xff0c;讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报&#xff0c;并指定循环次数、播报内容。由于通知…...

指针与函数(三)

三 .指向函数的指针 函数和数组一样,经系统编译后,其目标代码在内存中连续存放,其名字本身就是一个地址,是函数的入口地址。C语言中,指针可以指向变量,也可以指向函数。 指问函数的指针的定义格式为 类型名&#xff08;*指针变量名&#xff09;参数表 其中参数表为函数指针所…...

锐捷网络2025届校园招聘正式启动,【NTA6dni】!

锐捷网络2025届校园招聘正式启动&#xff0c;内推码[NTA6dni]。 原文链接点这 投递链接点这 祝大家面试顺利&#xff0c;offer多多~ 有问题大家可以评论&#xff0c;互相交流~...

共享内存喜欢沙县小吃

旭日新摊子好耶&#xff01; 系统从0开始搭建过通信方案&#xff0c;本地通信方案的代码&#xff1a;System V IPC 里面有共享内存、消息队列、信号量 共享内存 原理 两个进程有自己的内存区域划分&#xff0c;共享内存被创建出的时候是归属操作系统的&#xff0c;还是通过…...

五、Build构建配置:jar包换名、自行定义编译规则

&#xff08;1&#xff09;jar包换名&#xff1a;finalName &#xff08;2&#xff09;自行定义编译规则&#xff08;通常不用&#xff09; Maven约定的规则就是java目录下写java代码&#xff0c;resources目录下写配置文件。 遵循规则&#xff0c;Maven会帮忙做编译。 如若…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...