C语言刷题(一)

news2025/1/30 16:34:24

🐒博客名:平凡的小苏

📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情

 

目录

 用递归法求一个整数一维数组a的最大元素

猴子吃桃问题

奇偶数换位问题

水仙花数(0-100000)

换啤酒问题


 用递归法求一个整数一维数组a的最大元素

主要思想:利用sizeof计算出数组的元素,因为数组下标从1开始,需要将算出来的元素个数减1.因为传入十个元素递归方法不能直接比较,所以需要先转化为两个元素来比较,一直递归到第一个元素的下标,返回给k,然后k和f(arr[1])比较,哪个大就返回哪个,以此类推

代码演示:

#include<stdio.h>
int Array(int arr[], int sz)
{
	int k = 0;
	if (sz > 0)
	{
		k = Array(arr, sz - 1);//将它从大问题化为小问题,递归到只有两个数进行比较
		if (k > arr[sz])
		{
			return k;
		}
		else
			return arr[sz];
	}
	else
	{
		return arr[0];
	}
}
int main()
{
	int arr[] = { 9,2,4,5,0,1,6,7,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = Array(arr, sz - 1);//下标从0开始,所以减1
	printf("%d", ret);
	return 0;
}

猴子吃桃问题


猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾, 于是又多吃了一个第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第N天的时候发现桃子只有1个了。

(1<=N<=10)

需求:请问猴子第一天摘了多少个桃子 ?(递归和非递归求解)

非递归逆推法:

主要思想:依题意知,每次吃一半的桃子加一个,到最后一天会剩余一个桃子。那么我们把第十天来当成第一天,从小推大的方法就是,首先第十天剩余一个,那么第九天就是乘以两倍加一个桃子再加剩余没吃的桃子,得到第八天桃子数量,然后第八天乘以两倍加一个桃子,在加剩余一个没吃的得到第七天的桃子数量。以此类推得到第一天摘了多少个桃子。

 

 

代码演示:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
    int i, n = 1;	//n初始化为第1天的桃子数量
    for (i = day; i > 1; i--)	//依次计算第9天到第1天的数量
        n = (n + 1) * 2;
    printf("猴子第一天共摘了 %d 个桃子。", n);
}

递归方法:与逆推法思想是一样的


#include<stdio.h>
int Monkey(int day)
{
	if (day > 1)
	{
		return 2 * Monkey(day - 1) + 2;
	}
	else
	{
		return 1;
	}
}
int main()
{
	int day = 0;
	scanf("%d", &day);
	int ret = Monkey(day);
	printf("%d\n", ret);
	return 0;
}

 

奇偶数换位问题

题目:

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

不考虑相对顺序 

//不考虑相对顺序
#include<stdio.h>
void odd_even_swap(int* arr, int sz)
{
	int* left = arr;
	int* right = arr + sz - 1;
	while (left < right)
	{
		while (*left % 2 == 1 && left < right)//判断条件如果左边一半找到偶数就停下来,为了防止数组都是奇数所以需要left<right
		{
			left++;
		}
		while (*right % 2 == 0 && left < right)//判断条件右边一半由奇数就停下来,为了防止数组都是偶数需要left<right
		{
			right--;
		}
		if(left < right)//判断交换
		{
			int temp = *left;
			*left = *right;
			*right = temp;
		}
	}
}
int main()
{
	int arr[] = { 2,1,9,0,3,4,8,7,5,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	odd_even_swap(arr, sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;

}


.

 考虑先对顺序

代码演示:

#include<stdio.h>
void odd_even_swap(int* arr, int sz)
{
	int j = 0;
	int k = 0;
	int i = 0;

	for (j = 0; j < sz; j++)//遍历整个一维数组
	{
		if (arr[j] % 2 == 1)//判断是否为奇数
		{
			int temp = arr[j];//用temp存一下这个奇数,当偶数都后移一个位置后,将奇数赋值过去
			for (k = j - 1; k >= i; k--)
			{

				arr[k + 1] = arr[k];//将i和a之间的偶数都向后移动一个位置。这里用a-1,是为了防止a=0时进入循环,其实a=0;就不用交换了..还有就是为了防止交换时没有越界交换
			}
			arr[i] = temp;
			i++;
		}
	}
}
int main()
{
	int arr[] = { 2,1,9,0,3,4,8,7,5,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	odd_even_swap(arr, sz);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;

}

水仙花数(0-100000)

求出0~100000之间的所有“水仙花数”并输出。

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”

代码演示:

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	for (i = 0; i < 100000; i++)
	{
		int sum = 0;
		int count = 1;//计算数的位数
		int temp = i;
		while (temp/=10)
		{
			count++;
		}
		temp = i;
		while (temp)
		{
			sum += pow(temp % 10, count);//利用库函数求一个数的n位数的次方.使用pow库函数需要包含#include<stdio.h>的头文件
			temp /= 10;
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	
	return 0;
}

 

换啤酒问题


需求:啤酒2元1瓶,4个盖子可以换一瓶,2个空瓶可以换一瓶
请问n元钱可以喝多少瓶酒,剩余多少空瓶和盖子
答案 : 10元15瓶3盖子1瓶子

#include<stdio.h>
int main()
{
	int lid = 0;//盖子
	int money = 0;//钱
	int empty = 0;//空瓶
	int beer = 0;//啤酒
	int num = 0;
	scanf("%d", &money);
	beer = money / 2;
	lid = money / 2;
	empty = money / 2;
	while (empty>=2)//先换啤酒瓶,小于2个空瓶换不了啤酒
	{
		 num = empty / 2;//五个啤酒瓶换2个啤酒,并且就会得到两个空瓶和两个盖子
		empty = (empty % 2) + num;//如果啤酒瓶为单数,会剩下一瓶没换,所以需要取模于2
		lid += num;//换的啤酒瓶也会得到盖子
		beer += num;//更新啤酒的总数
		while (lid >= 4)//小于四个盖子换不了啤酒
		{
			num = lid / 4;//四个盖子换一瓶啤酒
			lid = (lid % 4) + num;//换的啤酒会得到盖子,并且需要加上小于4没有换的盖子
			empty = empty + num;//换完啤酒后需要更新啤酒的数量,因为换完啤酒后又有空瓶了
			beer += num;//更新啤酒的总数
		}
	} 
	printf("可以买到%d瓶啤酒\n", beer);
	printf("剩余%d个盖子\n", lid);
	printf("剩余%d个空瓶\n", empty);
	return 0;
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web前端电影项目作业源码 大学生影视主题网页制作电影网页设计模板 学生静态网页作业成品 dreamweaver电影HTML网站制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

redis命令行操作库、键、和五大数据类型详解

一、数据库操作命令 redis默认有16个数据库&#xff0c;类似数组下标从0开始&#xff0c;初始默认使用0号库。 1.1 测试是否连通 ping测试服务器是否连通 返回pone就是连通了 1.2 切换数据库 select index1.3 数据移动 move key db1.4 显示数据总量 dbsize1.5 数据清除 …

Maven 跳过测试的几种方式

在 Maven 对项目进行编译的时候&#xff0c;我们通常可能会希望跳过复杂的测试。 尤其是在开始项目还不是非常稳定的阶段。 命令行中使用 -Dmaven.test.skiptrue 在命令行&#xff0c;只要简单的给任何目标添加 maven.test.skip 属性就能跳过测试&#xff1a; mvn install …

leetcode:6251. 统计回文子序列数目【dp + 统计xy子序列出现的个数】

目录题目截图题目分析ac code总结题目截图 题目分析 固定了中间的数i后从两边选xy 和 yx对于x y的情况&#xff0c;比较简单预处理每个数字出现的index为ids然后看看两边x各自的个数n1 n2n1和n2必须大于等于2左边可以选n1 * (n1 - 1) // 2右边可以选n2 * (n2 - 1) // 2两边乘…

【C++】通过哈希表实现map和set

前言 在前面&#xff0c;我们通过红黑树这一底层结构实现了map和set。它们是关联式容器。而现在&#xff0c;我们将通过哈希表这一数据结构重新实现map和set&#xff0c;即unordered系列的关联式容器。因为它们的遍历是无序的&#xff0c;和平衡二叉树不同&#xff0c;不能做到…

APOLLO UDACITY自动驾驶课程笔记——规划、控制

1、路径规划使用三个输入&#xff0c;第一个输入为地图&#xff0c;Apollo提供的地图数据包括公路网和实时交通信息。第二个输入为我们当前在地图上的位置。第三个输入为我们的目的地&#xff0c;目的地取决于车辆中的乘客。 2、将地图转为图形 该图形由“节点”(node)和“边缘…

直流潮流计算matlab程序

一、直流潮流计算原理 直流潮流发的特点是用电力系统的交流潮流&#xff08;有功功率和无功功率&#xff09;等值的直流电流来代替。甚至只用直流电路的解析法来分析电力系统的有功潮流&#xff0c;而不考虑无功分布对有功的影响。这样一来计算速度加快&#xff0c;但计算的准确…

Rocket MQ : 拒绝神化零拷贝

注: 本文绝非对零拷贝机制的否定笔者能力有限&#xff0c;理解偏差请大家多多指正不可否认零拷贝对于Rocket MQ的高性能表现有着积极正面的作用&#xff0c;但是笔者认为只是锦上添花&#xff0c;并非决定性因素。Rocket MQ性能卓越的原因绝非零拷贝就可以一言以蔽之。 笔者企图…

第146篇 笔记-智能合约介绍

定义&#xff1a;当满足某些预定义条件时&#xff0c;智能合约是一种在区块链网络上运行的防篡改程序。 1.什么是智能合约 智能合约是在区块链网络上托管和执行的计算机程序。每个智能合约都包含指定预定条件的代码&#xff0c;这些条件在满足时会触发并产生结果。通过在去中…

IDEA热部署插件JRebel and XRebel

IDEA热部署插件JRebel and XRebel嘚吧嘚下载安装激活配置使用嘚吧嘚 刚开始用过一段时间的eclipse&#xff0c;其他方面没感觉&#xff0c;但是eclipse的热部署真的是深得我心啊&#x1f60a;。 后来换了IDEA&#xff0c;瞬间就心动了&#xff0c;各个方面真的很好用&#xf…

U3D VideoPlayer播放视频和坑点

最近做的游戏里,需要先播放一段几秒钟的工作室LOGO片头,拿到的视频是AVI格式,以前没在U3D里用到过视频,本以为很简单,没想到都2022年了,U3D播放视频还这么烂。。。 插件最好用的是AVPro,除非你有大量的视频要播放,否则没必要用插件,一个是贵,另一个插件很大。 首先…

Python爬虫从入门到进阶

前言 董伟明&#xff0c;国内某知名Python应用网站高级产品开发工程师&#xff0c;《 Python Web 开发实战》作者&#xff0c;本书目前已经售出 17k 余本&#xff0c;另外也已经在台湾地区上市。在 2012 和 2014 年分别通过 2 个爬虫免试获得 2 个业界知名公司 offer&#xff…

MyBatis缓存机制之一级缓存

MyBatis缓存机制之一级缓存 前言 MyBatis内部封装了JDBC&#xff0c;简化了加载驱动、创建连接、创建statement等繁杂的过程&#xff0c;是我们常见的持久性框架。缓存是在计算机内存中保存的临时数据&#xff0c;读取时无需再从磁盘中读取&#xff0c;从而减少数据库的查询次…

Node.js 入门教程 1 Node.js 简介

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程1 Node.js 简介1.1 大量的库1.2 Node.js 应用程序的示例1.3 Node.js框架和工具1 Node.js 简介 Node.js 是一个开源和跨平台…

子矩形计数(冬季每日一题 17)

给定一个长度为 nnn 的数组 aaa 和一个长度为 mmm 的数组 bbb。 两个数组均只包含 000 和 111。 利用两个给定数组生成一个 nmnmnm 的矩阵 ccc&#xff0c;其中 cijaibjc_{ij}a_ib_jcij​ai​bj​。 显然&#xff0c;矩阵 ccc 中也只包含 000 和 111。 请问&#xff0c;矩阵…

期末复习 c

作者&#xff1a;小萌新 专栏&#xff1a;C语言复习 作者简介&#xff1a; 大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;回顾之前的分支循环以及一些题目博客 [TOC](这里写目录标题分支循环选择switch casegetchar putchar 以及EOF三个C语言练习题总结…

C++智能指针之unique_ptr

C智能指针之unique_ptr前言一、unique_ptr1.1 unique_ptr类的初始化1.2 unique_ptr禁止拷贝和赋值1.3 release、reset函数1.4 向unique_ptr传递删除器1.5 unique_ptr与动态数组的使用总结前言 在C中&#xff0c;动态内存的申请和释放是通过运算符&#xff1a;new 和 delete 进行…

【无线传感器】基于Matlab实现WSN 查找两个节点之间的最短路径并发送数据

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Linux基础内容(13)—— 进程控制

目录 1.fork函数的进程创建 1.fork返回值 2.fork返回值 3.fork调用失败 2.写时拷贝 3.退出码的知识 4.进程退出 1.退出的情况 2.正常退出 5.进程等待 1.调用系统等待函数杀死僵尸进程 2.僵尸状态与PCB的关系 3.进程阻塞等待与非阻塞等待方式 6.进程程序替换 1.替…

【网络篇】第十八篇——IP协议相关技术

目录 DNS DNS背景 域名的层级关系 域名解析过程 使用dig工具分析DNS过程 ARP DHCP NAT NAT IP转换过程 NAPT NAT技术的缺陷 如何解决NAT潜在问题 ICMP ICMP功能 ICMP协议格式 ping命令 traceroute命令 IGMP 跟IP 协议相关的技术也不少&#xff0c;接下来说说与IP 协议相关的重…