郑州轻工业大学第三次周赛题目总结

2023-12-30 04:40

本文主要是介绍郑州轻工业大学第三次周赛题目总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目总链接:

http://acm.zzuli.edu.cn/contest.php?cid=1403

问题 A: 这个题目很简单的,快来做啊

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2553

题面:

在这里插入图片描述

题意:

一个整数T,代表样例个数(1<=T<=100)。每个样例包含一个n(1<=n<=10000),代表n次比赛,之后n行,每一行有两个数,分别是A和k,代表这次比赛做出了A道题,其中k道题被hack。输出T行,每行输出n次比赛AC题目的总量。

思路:

这道题目就是一个将每次比赛A的数值与hack的数值的差值进行累加,但是需要注意是所给数据的范围,所以我们要使用long long 型而不用int 型。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{long long  T;scanf("%lld",&T);while(T--)//T组输入{long long  n,a,b,c,sum=0;scanf("%lld",&n);while(n--){scanf("%lld%lld",&a,&b);c=a-b;//A的数值与hack的数值之差为ac的题目量sum=sum+c;//将其每次都相加}printf("%lld",sum);if(T!=0) printf("\n");}return 0;
}

问题 B: 最古老的树

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2554

题面:

在这里插入图片描述

题意:

一个n(0<n<=1000),代表盘点的树的数目, 接下来n个数字y,代表每棵树的年龄(0<y<=9500,y是整数)。输出次数出现最多的树龄,如果出现次数最多的树龄不止一个,就输出树龄小的那个。

思路:

这道题目的基本考察我们通过双重for循环来记数,同时用if 来判断出现次数的是哪一个,这道题目我们需要注意的是要特判出现次数相同的情况。因为题目要求当出现次数最多不止一个时,输出树龄较小的。使用要对此进行判断。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{int n,b,i,j,ans=0,m=-1;int a[10000];scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){ans=0;for(j=0;j<n;j++){if(a[i]==a[j]){ans++;//记录每种树龄出现的次数}}if(ans>m)//对树龄出现的次数的大小进行判断{m=ans;b=a[i];}else if(ans==m)//特判两个出现次数相同的情况{if(a[i]<b){b=a[i];//将输出值赋值为树龄较小的那个}}}printf("%d",b);
}

问题 C: Kokoa的咖啡聚会

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2555

题面:

在这里插入图片描述

题意:

多组输入,每组样例第一行包含三个正整数x,y和z(1<=x,y,z<=100000)——Mocca、Latte和Macchiato想喝咖啡的数量,第二行包含三个正整数a,b和c(1<=a,b,c<=100000)——Kokoa家里的摩卡、拿铁、玛奇朵的数量。然后mocca只喝摩卡,latte除了玛奇朵不喝,其他都喝,macchiato什么咖啡都喝。如果给出的三种咖啡数量能让所有人都心满意足,则输出"YES",否则输出"NO"

思路:

这道题目我们是想让所有人都心满意足,所以我们肯定是先让有要求的先选,所以这道题目肯定是mocca先选摩卡去喝,然后latte在选择,最后才是macchiato去选择,我们就可以通过if嵌套来实现,先判断mocca的量是否足够,然后减去mocca选择的,继续判断latte需要的量是否满足。就这样子一步一步进行判断。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{long long x,y,z,d,e;while(scanf("%lld%lld%lld",&x,&y,&z)!=EOF){long long a,b,c,d,e;scanf("%lld%lld%lld",&a,&b,&c);d=a+b;e=a+b+c;if(a>=x)//判断是否满足mocca的需求{d=d-x;//减去mocca选走的数目if(d>=y)//判断剩下的是否满足latte的需求{e=e-x-y;//减去前面两次选走的数目if(e>=z)//判断最后剩下的是否满足Macchiato的需求{printf("YES\n");}else printf("NO\n");}else printf("NO\n");}else{printf("NO\n");}}
}

问题 D: 讨厌的数字

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2556

题面:

在这里插入图片描述

题意:

第一行为整数T,代表有T组测试数据。 每组测试数据第一行两个整数N,K。第二行为K个整数A[i],代表讨厌的数字。数据范围:0 < T <= 100, 0 <= N <= 100000, 0 <= K <= 10, 0 <= A[i] <= 9。每组测试数据,输出最小值M,如果M不存在输出"-1"。

思路:

这道题目只要需要判断的情况就两种,一种是存在的情况,一种是不存在的情况,不存在的情况有为是当k为10时,然后之后输入的10个数字分别为0,1,2,3,4,5,6,7,8,9,时的时候是一定不存在一个数大于n并且没有讨厌的数字的情况,另外就是一定存在一个数字M大于n。
注:1.bool 函数:这个函数是定义在C++中的(部分编译器C语言中也有,具体看编译器支不支持),我们想使用这个函数的时候需要使用C++的头文件来使用,这个函数的特殊性是因为这个函数只能返回错误或者正确,当返回错误时就相当与返回0,而返回正确的时候就是返回非0的数字。

参考代码:

#include<bits/stdc++.h>//C++中的几乎万能头文件,能力很强大
using namespace std;
#define maxn 100005
int a[maxn],k,n;
int vis[maxn];//在头文件之下的就是定义的变量属于全局变量,全局变量是可以被本程序所有对象或函数引用
bool s_ans(int x)//bool 类型的函数是在C++中的,这个函数只返回ture or flase ,如果正确就是返回非0的数字,如果错误就是返回0.所以下面的0可以换成flase,1可以换成ture也没有问题。
{int ans;while(x){ans=x%10;//得到x这个数字的每一位x/=10;//不断自除使得while循环可以停止,这就是一个简单的求一个数字的各位的套路for(int i=0; i<k; i++){if(ans==a[i])//判断这位数字是否存在与讨厌数相等的位数return 0;//如果存在就返回0,就相当与返回错误}}return 1;//如果没有出现一次讨厌数就返回1,相当于返回正确
}
int main()
{int t;scanf("%d",&t);while(t--)//t组输入{memset(vis,0,sizeof(vis));//对vis这个数组进行清0int x,a_s=0;scanf("%d %d",&n,&k);for(int i=0; i<k; i++){scanf("%d",&a[i]);if(vis[a[i]]==0){vis[a[i]]=1;//标记0到k-1中的数字哪些输入过a_s++;//计算总共标记了几个不相同的讨厌数}}if(a_s==10||n!=0&&a_s==9&&vis[0]==0)//当不相同的讨厌数为10时,就是为0,1,2,3,4,5,6,7,8,9,这时候不可能存在一个M满足大于n,因为每个数字都是讨厌数了.还有一种特殊情况就是当你1到9都讨厌的时候并且n不为0,你也一定不会存在应该数字不包含讨厌数大于n的情况,所以要进行特判。{printf("-1\n");//这时候就输出-1continue;}for(int i=n;; i++){if(s_ans(i))//利用函数来判断是否满足不包含讨厌数{printf("%d\n",i);//如果不包含就输出break;//一旦出现就是最小的一个数大于n,这时候就可以跳出for循环}}}return 0;
}

问题 E: 拼字母

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2557

题面:

在这里插入图片描述

题意:

第一行为整数T,代表有T组测试数据。 每组测试数据为26个整数a[i],分别代表字母的数量。a[0]代表字母"a"的数量,a[1]代表字母"b"的数量,以此类推。数据范围:0 < T <= 100, 0 <= a[i] <= 1e9。然后输入最多可以组成多少个hello, world。输出组成的组数。

思路:

这道题目基本思路就是判断hello, world中的各个字母的数目,来判断他能不能组成一个hello, world,最后选择出现次数的为基准为确定可以组成的hello, world的组数。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{int t;long long int a[100000];scanf("%d",&t);while(t--){long long i,k;long long b[100000];for(i=1;i<=26;i++){scanf("%lld",&a[i]);}k=0;b[0]=a[4];//存储字母d的数目b[1]=a[5];//存储字母e的数目b[2]=a[8];//存储字母h的数目b[3]=a[12];//存储字母l的数目b[4]=a[15];//存储字母o的数目b[5]=a[18];//存储字母r的数目b[6]=a[23];//存储字母w的数目b[3]=b[3]/3;//组成一个hello, world需要3个字母lb[4]=b[4]/2;//组成一个hello, world需要两个osort(b,b+7);//对其组成可以组成hello, world的字母数目进行从小到大排序printf("%d",b[0]);//输出最小值就是可以组成最多的组数if(t!=0) printf("\n");}
}

问题 G: 数字的乘积

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2559

题面:

在这里插入图片描述

题意:

第一行为整数T,代表有T组测试数据。每组测试数据两个整数N和M。数据范围: 0 < T <= 100, 0 <= N, M <= 1e18。每组测试数据,输出N和M的乘积(结果对 1e18+7 取余.

思路:

这道题目根据N,M的范围确定肯定不能暴力解决,这时我们就需要(a+b)%mod==(a%mod+b%mod)%mod来使得数字不会爆掉long long 形,我们通过类似快速幂的方法。
注:这里引入一个快速幂的方法https://blog.csdn.net/yangzijiangac/article/details/96430488?utm_source=app
具体解释可以参考这个博客

参考代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
const long long mod=1000000000000000000+7;
long long quick_add(long long  a,long long  b,long long  mod)//定义一个快速加的函数
{long long  ans=0;while(b)//{if(b%2==1)//当b为奇数时,则需要单独加那个数字ans=(ans+a)%mod;a=(a+a)%mod;//b为偶数时则直接加。b=b/2;//加的次数减半}//最后这样b都会为1,所以最后的数值一定会存储在ans中return ans;
}
int main()
{int t;scanf("%d",&t);while(t--){long long a,b;scanf("%lld %lld",&a,&b);long long ans=quick_add(a,b,mod);printf("%lld\n",ans);}
}

问题 H: 阶乘的位数

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2560

题面:

在这里插入图片描述

题意:

输入一个t,代表t组输入,然后每组输入一个N和B,算出N的阶乘,在B进制下的位数。

思路:

这道题目显然不能有简单的阶乘去处理,因为到30的阶乘的时候long long 就会爆掉,我们不需要计算他在n的阶乘时的确定数值,只需要知道位数,我们就可以使用log ,在十进制的时候我们可以使用log10来计算这个数字的位数,而如果要计算他在b进制下的位数,则就可以使用logk()来计算而n的阶乘的位数就可以表示为logk(1)+logk(2)…这样子,就不会使得数据爆掉。这时候就可以顺利的计算n的阶乘在b进制下的位数。

参考代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{int t;scanf("%d",&t);while(t--){int n,k,sum;double ans=0;scanf("%d %d",&n,&k);for(int i=1;i<=n;i++){ans+=log(i)/log(k);}ans+=1;//因为是对b取log,我们需要+1.我们可以想8对10取log的结果是小于1的,而8这个数字是一位,所以需要加一个1再强制转换为整型sum=ans;//将小数强制转换为整数printf("%d\n",sum);}
}

这篇关于郑州轻工业大学第三次周赛题目总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551734

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi