C语言——习题练习(一)

news2025/1/9 16:10:49

习题:

        现在有两种面值的邮票,一种为8角,一种为6角。你要付n角的邮资(不能多付也不能少付),请给出邮票张数最少的方案。如果没有正好的方案则输出-1。

输入格式:

        只有一行,为若干个整数(至少有两个)。这些整数最后一个整数一定是-1(输入结束标志,无需处理),其他整数均大于0,这些大于0的整数代表邮资。

输出格式:

        若干行,每行依次对应输入的一个邮资,如果该邮资有正好的方案,则为两个用空格分隔的整数,代表张数最少的方案。前边的数字代表需要的8角的邮票的张数,后边的数字代表6角的邮票的张数;如果该邮资没有正好的方案则输出-1。测试用例保证所有整数均可以用int存储。。

输入样例:

24 14 11 -1

输出样例:

3 0
1 1
-1

代码1如下:

#include <stdio.h>
int main()
{
	int n = 0;
	int x, y;
	while (1)
	{
		again:
		scanf("%d", &n);
		if (n != -1)
		{
			for (x = 0; x <=n/6; x++)
			{
				for (y = 0; y <=n/8; y++)
				{
					if ((6*x + 8*y) == n)
					{
						printf("%d %d\n", y, x);
						goto again;
					}
				}
			}
            printf("-1\n");
		}
		else
		{
			break;
		}
	}
	return 0;
}

运行结果如下:

代码2如下:

#include <stdio.h>
int ba;
int main() {
	int n;
	while (1) {
		scanf("%d", &n);
		if (n == -1)break;
		ba = n / 8;
		int tt = 1;
		while (ba >= 0) {
			if ((n - ba * 8) % 6 == 0) {
				printf("%d %d\n", ba, (n - ba * 8) / 6);
				tt = 2;
				break;
			}
			ba -= 1;
		}
		if (tt == 1)printf("-1\n");
	}
}

运行结果如下:

下面进行代码解读:

代码1:

        x代表6角面值,y代表8角面值,n代表总面值,在外层循环中,循环变量x的取值范围是从0n/6,内层循环中循环变量y的取值范围是从0n/8。这种按照从小到大的顺序去遍历所有可能的xy的取值组合,本质上是一种穷举的方式。由于循环是从最小的可能值(也就是0)开始逐步增加,当第一次找到满足6*x + 8*y == n条件的xy时,它们在当前的穷举顺序下就是使得x + y相对最小的组合。

        举例来说,如果n = 24,外层循环x会先取0,然后内层循环y0开始取值,当y = 3(此时8 * 3 = 24 ,x还是0)时就满足条件了,因为循环从最小开始尝试,所以优先找到的就是数之和相对最小的组合(这里x + y = 0 + 3 = 3),不会出现先找到其他更大和的组合情况,比如x = 46 * 4 = 24,此时y = 0x + y = 4 )这种相对和更大的情况会在满足条件的更小组合之后才会去尝试到(但因为已经找到组合并输出了,后续更大和的情况就不会再去管了)。

        因此应该在x循环下遍历y才能保证最小。

代码2:
  1. 外层循环对 bay 的取值调整)的控制:代码中首先计算 ba = n / 8,这里是确定了 y(也就是对应 8 的倍数的数量)的初始最大可能值。然后进入 while (ba >= 0) 循环,这个循环会从这个最大可能值开始,逐步递减 ba(也就是 y 的取值逐步减少)。这种从大到小尝试 y 的取值方式是关键所在。因为在尝试用 6 和 8 的倍数组合去凑 n 的过程中,优先考虑让较大的数(这里是 8)尽可能多地参与,这样得到的组合中两个数的和相对会更小。例如,如果 n = 24,一开始 ba = 24 / 8 = 3,此时会先检查 3 个 8 能否满足情况,发现满足(因为 24 - 3 * 8 = 00 能被 6 整除),那就直接找到了 y = 3x = 0 的组合(x + y = 3),这就是数之和最小的组合。如果不先从大的 y 值开始尝试,可能会先找到其他 xy 值更大的组合来凑 n,比如先从 y = 0 开始尝试,然后不断增加 x 去凑,可能就会先找到 x = 4y = 0 这样 x + y = 4 的相对更大的组合了。        
  2. 内层条件判断对 x(n - ba * 8) % 6 == 0 部分)的确定:在每次 bay 的取值)确定后,通过 (n - ba * 8) % 6 == 0 这个条件来判断,剩余的数(也就是 n 减去当前 y 个 8 之后剩下的部分)能否被 6 整除。如果能整除,那就意味着找到了满足 6 * x + 8 * y = n 的 x(即 (n - ba * 8) / 6)和 y(即 ba)的一组值。  而且由于外层循环是从大到小递减 y 的取值,一旦找到满足条件的组合,就是按照这种有利于数之和最小的顺序下最先出现的组合,后续即使继续递减 y 再找,得到的组合中两数之和也只会更大(因为优先是让较大数 8 尽可能多地参与凑数了),所以此时找到的组合就是 x + y 最小的组合。

本期练习讲解就到这里~~~

往期回顾:

C语言——指针初阶(三)-CSDN博客

C语言——指针初阶(二)-CSDN博客

C语言——海龟作图(对之前所有内容复习)_c语言画图小动物代码-CSDN博客

C语言——指针初阶(一)-CSDN博客

C语言函数递归经典题型——汉诺塔问题_汉诺(hanoi)塔问题-CSDN博客

C语言——数组基本知识(二)_c语言四维数组的使用方法-CSDN博客

C语言——数组基本知识(一)-CSDN博客

C语言——数组逐元素操作练习-CSDN博客

C语言编程练习:验证哥德巴赫猜想 进制转换 rand函数-CSDN博客

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

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

相关文章

Redis 数据结结构(一)—字符串、哈希表、列表

Redis&#xff08;版本7.0&#xff09;的数据结构主要包括字符串&#xff08;String&#xff09;、哈希表&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&#xff09;、超日志&#xff08…

短视频矩阵系统saas源码 ---技术源头搭建部署

短视频矩阵系统源码 短视频矩阵系统源码主要有三种框架&#xff1a;Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架&#xff0c;提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框架&#xff0c;用于将数据模型、Web应用…

李飞飞:Agent AI 多模态交互的前沿探索

发布于:2024 年 11 月 27 日 星期三 北京 #RAG #李飞飞 #Agent #多模态 #大模型 Agent AI在多模态交互方面展现出巨大潜力,通过整合各类技术,在游戏、机器人、医疗等领域广泛应用。如游戏中优化NPC行为,机器人领域实现多模态操作等。然而,其面临数据隐私、偏见、可解释性…

macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表

以下是 macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表&#xff1a; 符号按键名称描述⌘Command (Cmd)常用的功能键&#xff0c;用于执行大多数快捷操作。⌥Option (Alt)Option 键&#xff0c;常用于辅助操作和特殊字符输入。⇧ShiftShift 键&#xff0c;常用…

开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?

在选择即时通讯软件时&#xff0c;应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异&#xff0c;因此总结两个点简要分析这两种选择&#xff0c;有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…

学习记录:js算法(一百一十七):重新安排行程

文章目录 重新安排行程思路一 重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c…

如何制作“优美”PPT

目录 1.免费PPT模板网站&#xff1a; 2.免费有较好质量的图片网站&#xff1a; 免费图片资源 免费透明PNG图片资源&#xff1a; 免费icon图片资源&#xff1a; 3.选择好的图片&#xff1a; 图片底色 4.要与不要 千万不要&#xff1a; 一定要&#xff1a; 6.一些建议…

从excel数据导入到sqlsever遇到的问题

1、格式问题时间格式&#xff0c;excel中将日期列改为日期未生效&#xff0c;改完后&#xff0c;必须手动单击这个单元格才能生效&#xff0c;那不可能一个一个去双击。解决方案如下 2、导入之后表字段格式问题&#xff0c;数据类型的用navicat导入之后默认是nvarchar类型的&a…

Python办公—DataMatrix二维条码制作

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

偏标记学习+图像分类

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具

一、简介 MinerU是开源、高质量的数据提取工具&#xff0c;支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面&#xff0c;适用于学术、商业、金融、法律等多领域&#xff0c;提高数据获取效率。一站式、开源、高质量的数据提取工具&…

fedora下Jetbrains系列IDE窗口中文乱码解决方法

可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC &#xff0c;设置后如下图&#xff1a;

机器学习详解(2):线性回归之理论学习

文章目录 1 监督学习2 线性回归2.1 简单/多元线性回归2.2 最佳拟合线2.3 成本函数和梯度下降2.4 线性回归的假设2.5 线性回归的评估指标函数 3 总结 机器学习是人工智能的一个分支&#xff0c;主要致力于开发能够从数据中学习并进行预测的算法和统计模型。线性回归是机器学习的…

半监督学习与数据增强

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

位运算符I^~

&运算&#xff1a;上下相等才是1&#xff0c;有一个不同就是0 |运算&#xff1a;只要有1返回的就是1 ^(亦或)运算&#xff1a;上下不同是1&#xff0c;相同是0 ~运算&#xff1a;非运算&#xff0c;与数据全相反 cpu核心运算原理&#xff0c;四种cpu底层小电路 例&#xf…

蓝桥杯软件赛系列---lesson1

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们今天会再开一个系列&#xff0c;那就是蓝桥杯系列&#xff0c;我们会从最基础的开始讲起&#xff0c;大家想要备战明年蓝桥杯的&#xff0c;让我们一起加油。 工具安装 DevC…

【0x01】HCI_Inquiry_Complete事件详解

目录 一、事件概述 二、事件格式及参数 2.1. HCI_Inquiry_Complete事件格式 2.2. 参数 三、HCI_Inquiry_Complete事件触发机制 3.1. 基于查询命令完成的触发 3.2. 受查询环境和设备状态影响的触发 3.3. 与蓝牙协议栈内部逻辑相关的触发 四、事件处理流程 4.1. 事件接…

安防视频监控平台Liveweb视频汇聚管理系统管理方案

智慧安防监控Liveweb视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚Liveweb平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

shell脚本实战案例

文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑&#xff1a;在Windows系统写了一个脚本&#xff0c;比如上面&#xff0c;随后上传到服务&#xff0c;执行会报错 原因&#xff1a; 解决方案&#xff1a;在linux系统touch文件&#xff0c;并通过vim添加内容&…

波特图方法

在电路设计中&#xff0c;波特图为最常用的稳定性余量判断方法&#xff0c;波特图的根源是如何来的&#xff0c;却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源&#xff0c;给出了其对应关系和波特图相应的稳定性余量。 理论贯通&#xff0c;不在于精确绘…