头歌-贪心算法

第1关 

找零钱

任务描述

本关任务:设计一个贪婪算法,使得找的钱币张数最少。

商店售货员找给 1 个顾客 n 元,用以下七种面值的纸币:100 元,50 元,20 元,10 元,5 元,2 元,1 元。

思考:如果商店售货员找给 1 个顾客 140 元,假设钱币的面值有九种:100 元,70 元,50 元,20 元,10 元,7 元,5 元,2 元,1 元。用贪婪算法得到的是该问题的最优解吗?

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务,注意需要学生自己获取找的钱 n。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:123(需要找给顾客的钱 n元)

预期输出:

#include <stdio.h>int greedy_coin_change(int amount) {// 定义面值数组和对应的纸币名称int coins[] = {100, 50, 20, 10, 5, 2, 1};const char *coin_names[] = {"100元", "50元", "20元", "10元", "5元", "2元", "1元"};// 初始化计数器int count = 0;// 计算找零for (int i = 0; i < sizeof(coins) / sizeof(coins[0]); i++) {// 计算当前面值的纸币张数int num_coins = amount / coins[i];// 输出当前面值纸币的张数和名称printf("%s %d张\n", coin_names[i], num_coins);// 更新剩余的金额amount %= coins[i];}return count;
}int main() {// 获取需要找给顾客的钱int n;scanf("%d", &n);// 调用贪婪算法计算最少需要的钱币张数int result = greedy_coin_change(n);// 输出结果return 0;
}

第2关:求一个数列的极差

本关任务:将 n 个正整数作成的一个数列,进行如下操作:每一次删除其中的两个数 a 和 b,然后在数列中加入一个数a×b+1,如此下去直至数列中剩下一个数。

在所有按这种操作方式最后得到的数中,最大的记作 max,最小的记作 min,则该数列的极差定义为M=max-min,请你使用贪心算法设计编程输出他们的极差。

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务(注意已经为你获取输入数据)。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:

 
  1. 7 //输入7(n)个整数
  2. 3 //此行及以下为具体的每个数据
  3. 5
  4. 7
  5. 9
  6. 11
  7. 13
  8. 15

预期输出:Max=max-min=2221298-2038489=182809

#include <stdio.h>/*********  Begin  **********/int s1,s2;
void max2(int a[],int n)
{int  j;if(a[1]>=a[2]){s1=1;s2=2;}else{s1=2;s2=1;}for (j=3;j<=n;j++){if(a[j]>a[s1]){s2=s1;s1=j;}else if(a[j]>a[s2])s2=j;}
}
int calculatemin(int a[],int n)
{while (n>2){max2(a,n);a[s1]= a[s1]* a[s2]+1;a[s2]=a[n];n=n-1;}return(a[1]* a[2]+1);
}
void min2(int a[ ],int n)
{int  j;if(a[1]<=a[2]){s1=1;s2=2;}else{s1=2;s2=1;}for (j=3;j<=n;j++){if (a[j]<a[s1]){s2=s1;s1=j;}else  if (a[j]<a[s2])s2=j;}
}
int calculatemax(int a[],int n)
{while (n>2){min2(a,n);a[s1]= a[s1]* a[s2]+1;a[s2]=a[n];n=n-1;}return(a[1]* a[2]+1);
}
int length(int a[])
{int i=1;while(a[i]!=0){i++;}return i-1;
}
int main()
{int i,n,b[100],max,min,num;scanf("%d",&num);int a[num+1];for (i=1;i<=num;i++)scanf("%d",&a[i]);for (i=1;i<=num;i++)b[i]=a[i];min= calculatemin(a,num);max= calculatemax(b,num);printf("Max=max-min=%d-%d=%d\n",max,min,max-min);
}
/*********  End **********/

第3关:将真分数用埃及分数之和表示

任务描述

本关任务:设计一个算法,把一个真分数 F 表示为埃及分数之和的形式。

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务,注意需要学生自己获取真分数再进行编程。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:3 5(3为分子,5为分母,真分数为3/5)

预期输出:3/5=1/2+1/10

#include "stdio.h"void main()
{/**********  Begin  **********/
int a,b,c;scanf("%d %d",&a,&b);if(a>=b)printf("输入错误");elseif(a==1 || b%a==0){printf("%d/%d=1/%d",a,b,b/a);}else{printf("%d/%d=",a,b);while(a!=1){c = b/a+1;a = a*c - b;b = b*c;printf("1/%d",c);if(a>=1)printf("+");if(b%a ==0 || a==1){printf("1/%d",b/a);a=1;}}}printf("\n");/**********  End  **********/
}

第4关:找到出现次数最多的数

任务描述

本关任务:给定 n 个正整数,编写一个实验程序找出它们中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:

 
  1. 6 //给定6(n)个正整数
  2. 10 //此行及以下为具体的每个数据
  3. 1
  4. 10
  5. 20
  6. 30
  7. 20

预期输出:出现次数最多的且最小的数为10

#include <stdio.h>
using namespace std;
#include<algorithm>/**********  Begin  **********/int find(int n,int * a)
{int maxn=0,bestd,num=1,i=1;sort(a,a+n);int pred=a[0];while(i<n){while(i<n&&a[i]==pred){num++;i++;}if(num>maxn){bestd=pred;maxn=num;}pred=a[i];num=1;i++;}return bestd;
}
int main()
{int n,bestd,i;scanf("%d",&n);int a[n];for(i=0;i<n;i++)scanf("%d",&a[i]);bestd=find(n,a);printf("出现次数最多的且最小的数为%d\n",bestd);return 0;
}
/**********  End  **********/

第5关:将给定的整数去掉任意个数字后重新组成最小整数

任务描述

本关任务:键盘输入一个高精度的正整数 n,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数。

编程对给定的 n 和 s,寻找一种方案使得剩下的数字组成的新数最小。

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:

 
  1. 231183 //正整数n
  2. 3 //去掉3(s)个数字

预期输出:113

#include <bits/stdc++.h>
using namespace std;int main() {/*********  Begin  ********/
int k;string s;cin >> s >> k;if (k > s.size()) {cout << "Invalid Input.";}while (k) {int i;for (i = 0; i < s.size() - 1 && s[i] <= s[i + 1]; i++);s.erase(i, 1);k--;}if (s.empty()) {cout << 0 << endl;}int i = 0;for (i = 0; i < s.size()-1;) {if (s[i] == '0') i++;else break;}cout << s.substr(i);return 0;/*********  End  ********/
}

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

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

相关文章

激活函数理解

前言 为什么神经网中非要有各种各样的激活函数&#xff1f;他们有什么用&#xff1f;没有他们会怎样&#xff1f;常见的激活函数有哪些&#xff0c;他们都有什么特点&#xff1f; 如果我们不运用激活函数&#xff0c;神经网络的输出信号将仅仅是一个简单的线性函数。线性方程…

Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 网络

为了支持网络协议栈的多个实例&#xff0c;Linux 在网络协议栈中引入了网络命名空间。这些独立的协议栈被隔离到不同的命名空间中&#xff0c;处于不同命名空间中的网络协议栈是完全隔离的&#xff0c;彼此无法通信。通过对网络资源的隔离&#xff0c;就能在一台宿主机上虚拟多…

L1-019 谁先倒(Java)

一、题目描述&#xff1a; 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就输了&#xff0c;输家罚一杯酒。两人同赢或…

android 事件分发笔记

这是学习笔记,以我看得明白为主。 分为 view.dispatchTouchEvent,---只有事件的处理逻辑 ----- ViewGroup.dispatchTouchEvent---实现了分发流程的逻辑 事件接收流程 setView#ViewRootImpl.java //接收事件的方法 ------> new WindowInputEventReceiver(inputChann…

FFmepg--视频编码流程--yuv编码为h264

文章目录 基本概念流程api核心代码 基本概念 YUV格式&#xff1a;是一种颜色编码方式&#xff0c;YUV分别为三个分量&#xff1a;‘Y’是明亮度&#xff0c;也就是灰度值&#xff1b;‘U’和‘V’是色度 YUV格式的分类&#xff1a; planar的YUV格式&#xff1a;先存储planar的…

初步了解序列化和反序列化

01什么是序列化和反序列化 序列化是将对象转化为字符串以便存储的一种方式。而反序列化恰好是序列化的逆过程&#xff0c;反序列化会将字符串转化为对象供程序使用。 常见的php系列化和反系列化方式主要有&#xff1a;serialize&#xff0c;unserialize&#xff1b;json_enco…

【运维开发岗面试题1】

目录 mkdir -p 中-p 是干什么的&#xff1f;df -h 和 du -h 命令作用&#xff1f;磁盘管理你都用到过什么命令&#xff1f;cp 和 mv 是干什么的&#xff1f;有什么区别内存大小怎么查看&#xff1f;查看内存的运行情况&#xff1f;怎么查看内存&#xff1f;进程杀不掉怎么办如何…

姿态旋转的哥氏定理以及速度微分的推导

姿态旋转中涉及到坐标系的转换&#xff0c;在有相对旋转的两个坐标系中观察一个向量的变化&#xff0c;用到了哥氏定理。 例如在i系中观察e系下的运动&#xff0c;则 哥氏定理的公式 wie是e相对于i的角运动 注意符号i在前e在后。 wie是e相对于i的角运动 注意符号i在前e在…

各个类型和Json类型的相互转换

ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类&#xff0c;它可以帮助我们快速的进行各个类型和Json类型的相互转换。 对应maven&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId&…

【驱动】编译内核时报错:multiple definition of `yylloc‘

1、问题描述 在Ubuntu22.04中编译Linux kernel4.9源码时报错: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here collect2: error: ld returned 1 exit status make[2…

R语言:如何基于地球外辐射(Ra)和相对日照(n/N)计算太阳辐射Rs?

正在编写相关软著&#xff0c;借此机会了解R语言的基本语法和一些处理流程&#xff0c;所以解释稍微繁琐。 Note&#xff1a; 使用的R语言版本是 R version 4.3.2 (2023-10-31 ucrt) 使用的RStudio编辑器版本是&#xff1a; 01 基于随机森林的插值填补缺失值 这是目前处理…

深入探索C与C++的混合编程

实现混合编程的技术细节 混合使用C和C可能由多种原因驱动。一方面&#xff0c;现有的大量优秀C语言库为特定任务提供了高效的解决方案&#xff0c;将这些库直接应用于C项目中可以节省大量的开发时间和成本。另一方面&#xff0c;C的高级特性如类、模板和异常处理等&#xff0c;…

mysql数据库中查询重复数据和去重数据

文章目录 1.查找重复数据2. 查到重复组的唯一数据3.删除重复数据4.注意重复的内容和删除的记录数是否一致 1.查找重复数据 select gene_entrez_id,count(*) a from diag_gene GROUP BY gene_entrez_id HAVING a > 12. 查到重复组的唯一数据 原理 分组后如果组内多个数据…

跨境电商干货|如何在Snapchat上做电商?

Snapchat是一个与用户互动与创意内容为主的平台&#xff0c;也因其广阔的受众群体广受跨境电商卖家的喜爱&#xff0c;成为跨境出海的热门渠道之一。本文将为大家分享&#xff0c;要在Snapchat上进行电子商务&#xff0c;可以遵循以下步骤&#xff1a; 1、创建商业账户 在Snap…

卷积的九大变体算法

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 引言 卷积神经网络&#xff08;CNN&#xff09;的核心在于其多样化的卷积技术&#xff0c;每种技术针对不同的应用和性能需求有着独特的优势。逐…

力扣46. 全排列

Problem: 46. 全排列 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 回溯可以理解为是在对一个多叉树的操作 1.回溯结束条件&#xff1a;当决策路径的长度等于nums数组的长度时&#xff0c;将当前的结果添加到二维结果集res中&#xff1b; 2.每一次决策的选择处…

javaScript链式调用的简单实现

链式调用在JavaScript很常见&#xff0c;比如jQuery、Promise和其它的插件等&#xff0c;都是使用的链式调用。链式调用可以让我们在进行连续操作时&#xff0c;写出更简洁的代码。 链式调用它允许你在单个对象上连续调用多个方法&#xff0c;每个方法的返回值都是调用它的那个…

Qt 图形视图 /基于Qt示例DiagramScene解读图形视图框架

文章目录 概述从帮助文档看示例程序了解程序背景/功能理清程序概要设计 分析图形视图的协同运作机制如何嵌入到普通Widget程序中&#xff1f;形状Item和文本Item的插入和删除&#xff1f;连接线Item与形状Item的如何关联&#xff1f;如何绘制ShapeItem间的箭头线&#xff1f; 下…

Java文件大小转换的两种方式

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 在程序开发的过程中&#xff0c;文件的大小在视图呈现和数据库存储的过程不一致怎么转换呢 文件大小的单位&#xff0c;在计算机中&#xff0c;文件大小通常使用字节&#xff08;byte&#xff09;作为…

穿越半个世纪,探索中国数据库的前世今生

引言 在数字化潮流席卷全球的今天&#xff0c;数据库作为 IT 技术领域的“活化石”&#xff0c;已成为数字经济时代不可或缺的基础设施。那么&#xff0c;中国的数据库技术发展经历了怎样的历程&#xff1f;我们是如何在信息技术的洪流中逐步建立起自己的数据管理帝国的呢&…