C语言:刷题日志(3)

一.猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

代码讲解: 

根据题目我们知道有n个猴子要选大王,从第一个开始报数,报到3时,去掉报3的这只猴子,之后下一个猴子重新从1开始报数,报到3的猴子再被淘汰,直到剩最后一只猴子,这只猴子就是猴王。既然这样我们以输入样例11举例,让我们来看看下面这张流程图。

我们将11只猴子设置为编号1-11号,从1号开始报数,报到3的被去掉,直到剩余最后一个猴子,最后我们发现最后的猴王是7号猴子,而我们要的结果也是7号,所以我们知道我们的流程是没有问题的,既然没有问题,那我们该如何用代码实现呢?我们发现在流程图中我们将猴子设为编号,并将报到3的猴子去掉,但在代码中其实我们可以将所有的猴子设为1,将去掉的猴子设为0,之后设置一个计数器每有一个等于1的猴子,count++,当count=3时,就将这个位置的猴子设为0,并将count重新赋值为0,并将猴子的个数减一(注意要设置一个变量存放猴子的总数,防止在循环中猴子的总数被改变),最后当猴子的数为1时,退出循环,(说明找到了猴王),因为只有最后一个数没有被改变,所以利用这个条件,打印猴王的编号。

#include<stdio.h>
int main()
{int n=0;scanf("%d",&n);int i=1;int count=0;int arr[1001]={0};for(i=1;i<=n;i++){arr[i]=1;}int num=n;while(num!=1){for(i=1;i<=n;i++){if(arr[i]==1){count++;}if(count==3){arr[i]=0;count=0;num--;}}}for(i=1;i<=n;i++){if(arr[i]==1){printf("%d",i);}}return 0;
}

二. 说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

代码讲解: 

首先,我们先建立一个数组用来存放字符串,再用gets和strlen函数得到字符串和长度,之后我们将字符串倒序查找,当遇到空格并且计数器的值不为0时,在相对于查找顺序倒着打印,所以我们要将打印的首下标设为当前查找地址的前一位(下标大的,因为是倒着打印下标有大到小),当然条件也要设为小于等于当前下标加上个数的值,最后再打印。当然,打印完我们要重新进行计数,所以要将计数器重新赋值为0,得到下一个字符串的长度。然而,我们要保证单词间只有1个空格,所以如果遇到多余的空格,只有当我们找到下一个不为空格的数时才会打印空格,这样就保证只会打印一个空格。当然我们的下标到0时就可以直接打印字符串了。

#include<stdio.h>
#include<string.h>
int main()
{char arr[500001] = {'0'};int i, j, count = 0;gets(arr);int sz = strlen(arr);for (i = sz - 1; i >= 0; i--){if (arr[i] == ' '&&count!=0){for (j = i + 1; j<= count + i ; j++){printf("%c", arr[j]);}count = 0;while (arr[i] == ' ' && i >= 0){i--;if (arr[i] != ' ' && i > 0){printf(" ");}}}if (arr[i] != ' '&&i>=0){count++;}if (i == 0){for (j = 0; j < count; j++){printf("%c", arr[j]);}}}return 0;
}

三.有理数加法 

本题要求编写程序,计算两个有理数的和。

输入格式:

输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。

输出格式:

在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:

1/3 1/6

输出样例1:

1/2

输入样例2:

4/3 2/3

输出样例2:

2

代码讲解:

根据题目要求我们要输入四个数两两组合代表一个分数,并将这两个分数相加并约分,所以我们知道,约分就是求最大公约数,我们可以利用辗转相除法,但这题的难点是如何将两个分数相加,而现在我们有一种方法,我们可以根据输入样例来证明一下:

1/3 和 1/6

即ret1 =1*6+1*3

    ret2=3*6

ret1/ret2=9/18

约分ret1/ret2=1/2

所以我们发现如果我们要求两个分数相加我们可以让第一个的分子和第二个的分母相乘再加上第二个的分子和第一个的分母相乘,然后再除上第一个分母和第二个分母相乘的结果。这样我们就能求出两个分数相加的结果,最后利用最大公约数去约分,得到的数就是所求的结果。

#include<stdio.h>
int main()
{int a1,a2,b1,b2,a,b;scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2);int ret1=0,ret2=0;int r=0;ret1=a1*b2+a2*b1;ret2=b1*b2;a=ret1;b=ret2;while( r=ret2%ret1){ret2=ret1;ret1=r;}a/=ret1;b/=ret1;if(b==1){printf("%d",a);}else{printf("%d/%d",a,b);}return 0;
}

四.有理数均值

本题要求编写程序,计算N个有理数的平均值。

输入格式:

输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。

输出格式:

在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:

4
1/2 1/6 3/6 -5/10

输出样例1:

1/6

输入样例2:

2
4/3 2/3

输出样例2:

1

代码讲解:

根据题目我们知道,他是要我们求所有分数的和并将他进行约分。首先,根据上一题我们知道如何去求分数的和,但现在让我们求多个分数的和,其实可以运用循环把他当成两个分数求完和之后和下一个分数再求和,所以我们要将第一个分数的值给一个变量,当然再进行相加时,我们要防止分母得0的情况,当将两个分数求完和之后我们就要直接进行求最大公约数并进行约分,这是为了防止所有数加完之后会溢出的情况,当然求最大公约数前我们要将sum1和sum2赋给其他变量,这是为了防止经过辗转相除后sum1和sum2的值发生改变,当求完所有分数相加后的结果后,我们就要进行求均值了,其实对于求均值我们完全可以将分母乘以他的个数,然后再进行约分处理,当然我们还是要将所有分数相加约分完后的分子分母赋给其他变量,防止经过辗转相除后值的发生改变,最后根据题目要求,我们知道若分母为1,则只输出分子,如果是负数,则负号一定出现在最前面,所以我们可以利用if语句进行判断如果分母为零时就只打印分子,当分母为负数时,就让分子和分母同时乘上负1,除此之外就可以直接进行打印。

#include<stdio.h>
int main()
{int a[100],b[100], n,i, sum1, sum2, r=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d/%d",&a[i],&b[i]);}sum1=a[0]; sum2=b[0];for(i=1;i<n;i++){if(b[0]!=0){sum1=sum1*b[i]+sum2*a[i];sum2*=b[i];}int ret1=sum1;int ret2=sum2;while( ret2){r=ret1%ret2;ret1=ret2;ret2=r;}sum1/=ret1;sum2/=ret1;}sum2*=n;int ret3=sum1;int ret4=sum2;while( ret4){r=ret3%ret4;ret3=ret4;ret4=r;}sum1/=ret3;sum2/=ret3;if(sum2==1){printf("%d\n",sum1);}else if(sum2<0){printf("%d/%d",sum1*(-1),sum2*(-1));}else{printf("%d/%d\n",sum1,sum2);}return 0;
}

五.字符串的冒泡排序

本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

输入格式:

输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

输入样例:

6 2
best
cat
east
a
free
day

输出样例:

best
a
cat
day
east
free

代码讲解:

 根据题目我们知道它要求我们输入n个字符串,并对它进行k次排序,首先我们创建一个数组用来存放字符串,利用循环和gets函数输入n次字符串,之后我们再利用冒泡排序,当然对于字符串的比较我们要利用strcmp函数,大于返回大于0的数,等于返回0,小于返回小于0的数,对于字符串的交换我们还要利用strcpy函数将字符串拷贝的创建的tmp数组里,再进行交换处理。当然,最后要记得设置打印条件当i==k-1时,即循环几次后才能进行打印字符串。

#include<stdio.h>
#include<string.h>
int main()
{int n,k,i,j;scanf("%d %d\n",&n,&k);char arr[100][11];for(i=0;i<n;i++){gets(arr[i]);}for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++){if(strcmp(arr[j],arr[j+1])>0){char tmp[11];strcpy(tmp,arr[j]);strcpy(arr[j],arr[j+1]);strcpy(arr[j+1],tmp);}}if(i==k-1){for(i=0;i<n;i++){puts(arr[i]);}break;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/420973.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云镜像报错 [Errno 14] HTTP Error 302 - Found 问题解决记录

1、问题背景和解决思路 在本地安装 CentOS7 后&#xff0c;网络已调通可正常上网&#xff0c;但切换阿里云镜像后&#xff0c;使用 yum 安装软件时出现 “[Errno 14] HTTPS Error 302 - Found Trying other mirror.” 报错&#xff0c;原因是 yum 源配置问题。给出了详细的解决…

苹果首款AI手机发布!iPhone 16全新AI功能体验感拉满

苹果于2024年秋季盛大发布iPhone 16系列&#xff0c;带来前所未有的AI智能体验。iPhone 16系列不仅硬件全面升级&#xff0c;更融入了尖端的AI技术&#xff0c;为用户带来更加智能化的生活体验。 在科技春晚的舞台上&#xff0c;苹果不负众望地揭开了iPhone 16系列的神秘面纱。…

ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换

1 环境问题 安装完Qt6&#xff0c;新建Qt/QtQuick CMake工程编译出现如下错误: Found package configuration file: Qt6Config.cmake but it set Qt6 FOUND to FALSE so package "Qt6" is considered to be NOT FOUND. 原因&#xff1a; 这是因为系统中缺少OpenG…

缓存穿透、缓存雪崩、缓存击穿

图片没了&#xff0c;真的难受啊。。 缓存穿透 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单…

Java 入门指南:Java 并发编程 —— 同步工具类 CountDownLatch(倒计时门闩)

文章目录 同步工具类CountDownLatch常用方法使用步骤适用场景使用示例 同步工具类 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 提供的用于并发编程的工具类库&#xff0c;其中包含了一些通信工具类&#xff0c;用于在多个线程之间进行协调和通信&#xff0c;特别…

uniapp媒体

uni.previewImage实现图片放大预览 // 图片预览函数function onPreview(index) {// 收集所有图片的urlvar urls pets.value.data.map(item > item.url)// 预览图片uni.previewImage({current: index, // 当前预览的图片索引urls: urls // 所有图片的url数组})}

大模型api谁家更便宜

1 openai 可点此链接查询价格&#xff1a;https://openai.com/api/pricing/ 2 百度 可点此链接查询价格&#xff1a;https://console.bce.baidu.com/qianfan/chargemanage/list 需要注意&#xff0c;百度千帆平台上还提供其他家的模型调用服务&#xff0c; 如llama, yi-34b等…

秋招突击——算法练习——9/4——73-矩阵置零、54-螺旋矩阵、48-旋转图像、240-搜索二维矩阵II

文章目录 引言复习新作73-矩阵置零个人实现 54-螺旋矩阵个人实现参考实现 48-旋转图像个人实现参考实现 240-搜索二维矩阵II个人实现参考实现 总结 引言 秋招开展的不是很顺利&#xff0c;还是要继续准备&#xff0c;继续刷算法&#xff01;不断完善自己&#xff0c;希望能够找…

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片&#xff0c;视频&#xff0c;摄像头的检测 项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面&#xff08;GUI&#xff09;以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测&#xff0c;并估算目标的距离。通过…

揭开Facebook AI的神秘面纱:如何利用人工智能提升社交体验

人工智能&#xff08;AI&#xff09;正迅速成为推动技术进步的核心力量&#xff0c;而Facebook作为全球领先的社交媒体平台&#xff0c;正通过AI技术不断提升用户体验和平台功能。本文将深入探讨Facebook如何利用AI技术&#xff0c;优化社交互动、内容推荐和用户管理&#xff0…

Sentinel 使用案例详细教程

文章目录 一、Sentinel 使用1.1 Sentinel 客户端1.2 Sentinel 控制台1.3 客户端和控制台的通信所需依赖 二、测试 Sentinel 限流规则2.1 启动配置2.2 定义限流资源2.3 配置流量控制规则2.4 运行项目 三、 测试 Sentinel 熔断降级规则3.1 定义资源3.2 配置熔断降级规则3.3 运行项…

info_scan!自动化漏洞扫描系统,附下载链接

在我们团队的日常工作中&#xff0c;定期进行安全演练和漏洞扫描几乎是必不可少的。每次安全互动我们都需要对关键资产进行全面的安全评估&#xff0c;及时发现可能存在的安全隐患。 就在上周&#xff0c;我们针对几个主要服务进行了例行的漏洞扫描。在这个过程中&#xff0c;…

DevOps平台搭建过程详解--Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台

一、环境说明 1.1CI/CD CI即为持续集成(Continue Integration,简称CI)&#xff0c;用通俗的话讲&#xff0c;就是持续的整合版本库代码编译后制作应用镜像。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等;(Jenkins) CD即持续交付Con…

合宙低功耗4G模组Air780EX——硬件设计手册01

Air780EX是一款基于移芯EC618平台设计的LTECat1无线通信模组。支持FDD-LTE/TDD-LTE的4G远距离无线 传输技术。另外&#xff0c;模组提供了USB/UART/I2C等通用接口满足IoT行业的各种应用诉求。 一、主要性能 1.1 模块功能框图 1.2 模块型号列表 1.3 模块主要性能 *注: 模组…

Leetcode 最大子数组和

使用“Kadane’s Algorithm”来解决。 Kadane’s Algorithm 在每个步骤中都保持着一个局部最优解&#xff0c;即以当前元素为结尾的最大子数组和(也就是局部最优解)&#xff0c;并通过比较这些局部最优解和当前的全局最优解来找到最终的全局最优解。 Kadane’s Algorithm的核…

巧用工具,Vue 集成 medium-zoom 实现图片缩放

文章目录 巧用工具&#xff0c;Vue 集成 medium-zoom 实现图片缩放介绍medium-zoomVue3集成 medium-zoom 示例Vue2集成 medium-zoom 示例进阶 - 可选参数 巧用工具&#xff0c;Vue 集成 medium-zoom 实现图片缩放 在现代网页开发中&#xff0c;为用户提供良好的视觉体验至关重…

K-Means聚类

聚类的作用&#xff1a; 知识发现 发现事物之间的潜在关系 异常值检测 特征提取 数据压缩的例子 有监督和无监督学习&#xff1a; 有监督&#xff1a; 给定训练集 X 和 标签Y 选择模型 学习&#xff08;目标函数的最优化&#xff09; 生成模型&#xff08;本质上是一组参…

RocketMQ异步报错:No route info of this topic

在SpringBoot中发送RocketMQ异步消息的时候报错了&#xff0c;提示org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, testTopic1 这里给出具体的解决方案 一、Broker模块不支持自动创建topic&#xff0c;并且topic没有被手动创建过 R…

OpenCV 与 YoloV3的结合使用:目标实时跟踪

目录 代码分析 1. YOLO 模型加载 2. 视频加载与初始化 3. 视频帧处理 4. 物体检测 5. 处理检测结果 6. 边界框和类别显示 7. 帧率&#xff08;FPS&#xff09;计算 8. 结果显示与退出 9. 资源释放 整体代码 效果展示 总结 代码分析 这段代码使用 YOLO&#xff08…

Linxu系统:kill命令

1、命令详解&#xff1a; kill命令是用于向进程发送信号&#xff0c;通常用来终止某个指定PID服务进程&#xff0c;kill命令可以发送不同的信号给目标进程&#xff0c;来实现不同的操作&#xff0c;如果不指定信号&#xff0c;默认会发送 TERM 信号&#xff08;15&#xff09;&…