2023年河南工程学院新生周赛(一)

 A.最后一课

“琪亚娜看着已经逝去的姬子老师,决定不再逃避。”

令我不明白的是,琪亚娜决定不再逃避,为什么要来难为我?

难为不难为的先不说,题目里好像出现了几个熟悉的字眼:

原点,出口,距离,坐标

将这几个关键字联系到一起,我们能想到什么?

对咯!两点间距离公式:d * d = (x1 - x2)²+(y1 - y2)²

可还有一个棘手的问题,琪亚娜在做梦,我们算出来的这个玩意儿对她来说叫理论距离,可是她想知道的是那个叫实际距离的ber ber儿~

怎么办?求呗!

可以看出,这个数学函数是分段函数,并且第二段和第三段的函数值再次使用了这个函数求值

典型的递归函数

典!

看到这里,已经学过函数的你应该茅塞顿开了吧?

代码实现如下:

#include <stdio.h>
#include <math.h>

double f(double d)
{
	if(d <= 10) return d;
	if(d <= 50) return d + f(d - 5); //递归调用f函数求值
	return d + f(d - 20);
}

int main()
{
	double x, y; //注意题目要求输出保留四位小数,所以我们这里直接使用浮点数类型的变量存储
	scanf("%lf %lf",&x, &y);//读入终点坐标
	
	printf("%.4lf", f(sqrt(x * x + y * y)));//向f函数传递理论距离,并将函数结果(返回值)输出
	return 0;
}

C.罪人挽歌

又是你啊琪亚娜,你反思自己就反思自己,成天来折磨我干嘛┗|`O′|┛

我愿将琪亚娜视为我的一生之敌

读过题目后我们可以获取的信息有:

        第奇数天,我的一生之敌会修炼8小时,而第偶数天,她会修炼6小时

        每修炼一小时,她就会增加k点战斗力,那么她每修炼两天,就会固定增长(8 + 6)* k点战斗力

        她的目标呢?战斗力大于等于m

需要注意的是,她的初始战斗力为n,所以她需要增长m - n点战斗力

每两天可以增长(8 + 6)* k点战力,我们自然是可以看她需要经历几次双修连续两天修炼的

怎么看?这样看:x = (m - n) / (14 * k); (ps:8 + 6 = 14)

这样我们拿到的x就是她需要连续修炼两天的次数,即她需要修炼2 * x天;

但是,如果m - n不是 14 * k的整数倍,我们就需要去另外算他剩余需要修炼的战斗力点数了

剩余所需修炼的战斗力点数为:y =(m - n) % (14 * k);

显然,这些战斗力点数是不足以让她修炼超过两天的,那么我们只需要看是需要修炼1天还是2天就可以了

由于之前的修炼是双修(两天两天修的),所以下一次修炼还是从奇数天开始

修炼第一天为8小时,第二天为6小时

如果y等于0,则她不需要额外的修炼天数

如果y大于0且小于等于8 * k,则需要额外修炼一天

如果y大于8 * k,则需要额外修炼两天

理论成立,代码实现如下:

//注意数据范围0<=n<=m<=1e12,需要开long long

#include <stdio.h>

long long cnt;

int main()
{
	long long n, m, k;
	scanf("%lld%lld%lld",&m,&n,&k);
	
	m -= n;
	cnt += m / (14 * k) * 2; //双修次数
	m %= 14 * k;
	
	if(m > 8 * k) cnt += 2; //多修两天
	else if(m) cnt += 1; //多修一天
	
	printf("%lld", cnt);
	return 0;
}

D.渡尘

先看题,很好,这题没有琪亚娜

符华你是数龟的吗?碰到不喜欢的年份还能冬眠的?

这题看似很复杂,其实思路很简单:

        我们首先去遍历从1到50000之间的所有年份,每次定义一个变量flag用于标记,如果flag的值         为1,代表当前年份计入符华总年龄,否则不计入

对于每一个年份i的判断,我们要考虑两点:

        1、当前年份是否是x的倍数

        2、当前年份的每一位中是否有x

上述两点任意一点成立,我们都需要改变变量flag的值为0,表示当前年份不计入符华总年龄

代码实现如下:

#include <stdio.h>

int main()
{
	int n = 50000, i, x, cnt = 0;
	
	scanf("%d",&x);
	for(i = 1; i <= n; i ++)
	{
		int k = i, flag = 1;
		while(k > 0)
		{
			if(k % 10 == x) //判断当前最后一位是否是x
			{
				flag = 0;
				break;
			}
			k /= 10; //舍去当前最后一位(如123 / 10 == 12)
		}
		
		if(i % x == 0) flag = 0;
		
		if(flag) cnt ++;
	}
	
	printf("%d", cnt);
	
	return 0;
}

E.薪炎永燃

解:由题意得:

设cnt为以点(i,j)为左上角顶点的3*3矩形中敌人数量的和

题目要求我们找炮弹能够消灭的最多的敌人数量,则我们需要去遍历每一个3*3矩形(即遍历点(i,j),求得每一个矩形的cnt),用max去记录当前遍历过的矩阵的最大值,每次用cnt与max比较,如果cnt的值大于max,则将cnt的值赋给max,最后输出max即可。

理论成立,代码实现如下:

#include <stdio.h>
 
int n, q[1010][1010];
 
int main()
{
    scanf("%d",&n);
     
    int i, j, k, l, max = 0;
    for(i = 1; i <= n; i ++)
    {
        for(j = 1; j <= n; j ++)
        {
            scanf("%d",&q[i][j]);
        }
    }
     
    int cnt;
    for(i = 1; i <= n - 2; i ++)
    {
        for(j = 1; j <= n - 2; j ++)
        {
            cnt = q[i][j] + q[i][j + 1] + q[i][j + 2] + q[i + 1][j] + q[i + 1][j + 1] + q[i + 1][j + 2] + q[i + 2][j] + q[i + 2][j + 1] + q[i + 2][j + 2];
             
            if(cnt > max)
            {
                max = cnt;
            }
        }
    }
     
    printf("%d", max);
    return 0;
}

F.阿波卡利斯如是说

主教:或许用这玩意儿能秒了他? 

 

由于主教已身受重伤,只能释放最多两次攻击,而我们有三种攻击方式,若要判断能否击败怪兽,只需判断造成伤害最多的两次攻击造成的伤害之和是否大于怪兽血量即可。

首先读入n与m,分别代表武器种类数和怪兽血量

接下来进行n轮循环,每轮循环中再用循环去读入三种攻击方式造成伤害数,用sum表示三种攻击方式伤害数之和,min表示三种攻击伤害的最小值

sum - min即为伤害数最高的两次攻击的伤害点数之和

我们用sum - min与m进行比较,若sum - min >= m,则可以击败怪物,否则不能击败

ans用于记录可以击败怪物的武器种类数

代码实现如下:

#include <stdio.h>
 
int main()
{
    int n, m, i, ans = 0;
    scanf("%d%d",&n,&m);
     
    while(n --)
    {
        long long x, sum = 0, min = 1e10;
        for(i = 1; i <= 3; i ++)
        {
            scanf("%lld", &x);
            sum += x;
             
            if(x < min) min = x;
        }
         
        if(sum - min >= m)
        {
            printf("Yes\n");
            ans ++;
        }
        else printf("No\n");
    }
     
    printf("%d", ans);
    return 0;
}

G.因你而在的故事

如果这题你不会,请去复习/预习课本中循环章节的知识

如果你看不懂课本,请自行搜索翁恺C语言或其他视频自行学习

如果你还是没学会,请将这道题视为你的一生之敌

如果你来问我,那么我会将你视为我的一生之敌

代码实现如下:

for循环实现

```
#include <stdio.h>
 
int main()
{
    int i;
    for(i = 1; i <= 520; i ++)
    {
        printf("回应我吧,爱莉希雅!\n");
    }
    return 0;
}
```

while循环实现
```
#include <stdio.h>
 
int main()
{
    int n = 520;
    while(n --)
    {
        printf("回应我吧,爱莉希雅!\n");
    }
    return 0;
}
```

H.毕业旅行

我们定义两个字符数组a,b用来存储字符串

其中a用来存储 "Lovestory",b用来存储每轮测试读入的字符串

在每轮测试中,我们将字符串存入字符数组b中,并将其与字符数组a进行逐位对比

用整型变量k记录两字符串之间相同下标不同元素的位置的数量

如果k为0,则说明a与b完全相同,输出 "This is a story about love!"

否则输出k

注意每轮测试输出后的换行

#include <stdio.h>
#include <string.h>
 
char a[10] = {'L','o','v','e','s','t','o','r','y'}, b[10]; //对a数组进行集成初始化,让其存储字符串 "Lovestory"
 
int main()
{
    int n, i;
    scanf("%d",&n);
     
    while(n --)
    {
        scanf("%s",b);
         
        int k = 0;
        for(i = 0; i < 9; i ++)
        {
            if(a[i] != b[i]) k ++;
        }
         
        if(k != 0) printf("%d\n",k);
        else printf("This is a story about love!\n");
    }
    return 0;
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值