“真我风采”程序竞赛

2023-11-23 07:30
文章标签 程序 竞赛 风采

本文主要是介绍“真我风采”程序竞赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做题技巧总结:

1.前缀和数组

2.双指针,快慢指针

3.递归

4.qsort使用

5.结构体的使用

6.测试样例有部分不能通过,考虑一下特殊情况

易错点:

1.gets函数对同一个字符数组输入时,后一次输入会覆盖前一次的输入

2.当qsort按照结构体的某个元素排序结构体时,大小填的是结构体的大小

3.分支循环语句记得break

4.将整数以十六进制形式输出,用%x或%X(大写和小写)

5.打印 long long用%lld

6.字符数组是用\0表示为空

int a[10] = {0},数组里的数都被初始化为0

 但是char b[10] = {0},数组里的数被初始化为 \0

7.

【程序1】 发红包

从2018年1月1日开始,小明每天给Angela发一个红包,红包金额的单位为元(¥),其中:金额的整数部分与月份相同,金额的小数部分与日期相同。具体的红包金额如下所示:

现在请你计算:截止于2018年某个具体的日期,小明发给Angela的红包金额总数是多少?

14:20-14:32

#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#include<math.h>int main(){int days[13] = {31,28,31,30,31,30,31,31,30,31,30,31};int y,m,d;scanf("%d%d%d",&y,&m,&d);double sum = 0;int i = 0,j = 0;for(i = 1;i<m;i++){sum+=days[i-1]*i;for(j = 1;j<=days[i-1];j++){if(j<10){sum+=0.1*j;}else{sum+=0.01*j;}}}sum += m*d;for(j = 1;j<=d;j++){if(j<10){sum+=0.1*j;}else{sum+=0.01*j;}}printf("%.2f",sum);
}

【程序2】IDENTITY V

Yuki最近迷上了一款叫作IDENTITY V(第五人格)的游戏,六一节快到了,游戏也推出了一个活动。在活动期间,使用不同的角色参与对战,根据玩家在该局游戏中的表现会给予该角色相应的演绎积分,当演绎积分到达2000时,可以兑换相应角色的动态头像。该游戏现有的典型角色如下:

Yuki十分想要得到动态头像,每个玩家只能获得一个角色的动态头像,如果某一角色的积分足够,他会立即兑换。请根据Yuki在活动期间的对战情况,看看Yuki能够得到哪个角色的头像。

 

【测试样例1】
5
2
Doctor 500
Gardener 600
2
Doctor 500
Gardener 600
3
Machinist 600
Doctor 500
Machinist 800
1
Doctor 500
1
Machinist 800【测试样例2,请注意这一组的角色名称】
3 
2
ZXY 900
YWH 500
1
CXW 400
1
WSY 600

【测试样例1】
Doctor【测试样例2】
NOTHING

14:36-14:56

要注意c语言中字符串不能直接赋值,要用到strcpy

#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#include<math.h>
struct Role{int score;char name[21];
}role[200];
int count = 0;//记录角色数量 //若已有此角色,返回该角色下标 
int check_name(char name[]){for(int i = 0;i<count;i++){if(strcmp(role[i].name,name)==0){return i;}}return -1;
}int check_score(){for(int i = 0;i<count;i++){if(role[i].score>=2000){return i;}}return -1;}
int main(){int T,n;int i = 0;int score;char name[21];scanf("%d",&T);for(i = 0;i<T;i++){scanf("%d",&n);for(int j = 0;j<n;j++) {scanf("%s %d\n",&name,&score);//输入加上\nint index = check_name(name);if(index>=0){role[index].score += score;}else{strcpy(role[count].name,name);role[count].score = score;count++;}index = check_score();if(index>=0){printf("%s",role[index].name);return 0;}}}printf("NOTHING");return 0;
}

【程序3】四边形的面积

已知平面上四点P1、P2、P3、P4的坐标,分别为(X1,Y1)、(X2,Y2)、(X3,Y3)、(X4,Y4)
如果将P1P2连线的中点A、P2P3连线的中点B、P3P4连线的中点C以及P4P1连线的中点D连接为一个新的四边形,你能否计算出四边形ABCD的面积?

在平面几何中,ABCD被定义为中点四边形。容易证明:ABCD为平行四边形 

主要是海伦公式计算三角形面积

#include<stdio.h>
struct Node{double x;double y;
}p_node[4],node[4];
int main()
{int i = 0;for(i = 0;i < 4;i++){scanf("%lf%lf",&p_node[i].x,&p_node[i].y);}//点A node[0].x = (p_node[0].x+p_node[1].x)/2;node[0].y = (p_node[0].y+p_node[1].y)/2;//点Bnode[1].x = (p_node[1].x+p_node[2].x)/2;node[1].y = (p_node[1].y+p_node[2].y)/2;//点Cnode[2].x = (p_node[2].x+p_node[3].x)/2;node[2].y = (p_node[2].y+p_node[3].y)/2;//点Dnode[3].x = (p_node[0].x+p_node[3].x)/2;node[3].y = (p_node[0].y+p_node[3].y)/2;double AC = sqrt((node[0].x-node[2].x)*(node[0].x-node[2].x)+(node[0].y-node[2].y)*(node[0].y-node[2].y));double AB = sqrt((node[0].x-node[1].x)*(node[0].x-node[1].x)+(node[0].y-node[1].y)*(node[0].y-node[1].y));double BC = sqrt((node[1].x-node[2].x)*(node[1].x-node[2].x)+(node[1].y-node[2].y)*(node[1].y-node[2].y));double s = (AB+BC+AC)/2;double S = sqrt(s*(s-AB)*(s-BC)*(s-AC));printf("%.2f",S*2);return 0;
}

【程序4】姓名缩写

用全拼查找人名比较麻烦,如果通过缩写查找姓名会方便很多。现给出n(1≤n≤100)个人的姓名全拼和一个姓名缩写,请你快速查找出该缩写对应的人名。

#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#include<math.h>
struct Person{char name[31];
}p[101];int cmp(const void* e1,const void* e2){struct Person* a = (struct Person*)e1;struct Person* b = (struct Person*)e2;//返回值为负,e1排在e2前面 return strcmp(a->name,b->name)<0?-1:1;
}void check(char s[],int n){int span = 'A' - 'a';int i = 0;for(i = 0;i<strlen(s);i++){s[i]+=span;}int c = 0;//注意!strlen遇到空格不会停止读取!for(i = 0;i<n;i++){char name[31] = {0};int count = 0;for(int j = 0;j<strlen(p[i].name);j++){if(p[i].name[j]>='A'&&p[i].name[j]<='Z'){name[count++] = p[i].name[j];}}if(strcmp(s,name)==0){puts(p[i].name);c = 1;}}if(c==0){printf("No");}}
int main(){int n = 0;scanf("%d\n",&n);for(int i = 0;i<n;i++){gets(p[i].name);}char goal[31] = {0};gets(goal);qsort(p,n,sizeof(struct Person),cmp);check(goal,n);return 0;
}

【程序5】碧蓝航线

《碧蓝航线》是时下非常热门的一款游戏,是b站代理第二的游戏(第一FGO)。

《碧蓝航线》里面有一个演习模式,这个模式出击需要六艘战舰,前排3艘(前排战舰类型为DD(驱逐),CA(重巡),CL(轻巡)),后排3艘(后排战舰类型BB(战列),CV(航母))。每艘船都有战斗力,一般情况下总战斗力(六艘战斗力的和)和越大,演习的胜率越高。

因为前一段时间海军节,kirito迷上了《碧蓝航线》,他想最大可能性赢得演习的条件下,按阵营喜欢程度上阵战舰(总共4个阵营,白鹰、铁血、重樱、皇家),请你帮他选出6艘战舰,输出总战力和六艘战舰名字,若不行则输出NO。

【样例1】
10
2 3 4 1
Enterprise 4000 CV 1
Nagato 4500 BB 3
Azuma 4200 CA 3
Hood 3800 BB 4
Eldridge 3900 DD 1
Yuudachi 3500 DD 3
Kaga 4000 CV 3
Akagi 4000 CV 3
PrinzEugen 4000 CA 2
Z46 3900 DD 2
【样例2】
6
1 2 3 4
22 9999 DD 1
33 9999 DD 4
Asuna 8888 CL 3
Minneapolis  8888 CA 1
Yamato 7777 BB 3
Musashi 7777 BB 3

【样例1】
24600
Azuma
PrinzEugen
Z46
Nagato
Kaga
Akagi
【样例2】
NO

第二个样例后排无法组成,所以为NO 

#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#include<math.h>
struct Ship {char name[21];int atk;//攻击char type[3];//前排:DD,CA,CL//后排:BB,CV int camp[1][2];//1白鹰,2铁血,3重樱,4皇家//第一列是阵营,第二列是喜爱程度 
}ship[101],f[101],b[101];
int sum_atk = 0;void Print() {int i = 0;printf("%d\n", sum_atk);for (i = 0; i < 3; i++) {printf("%s\n", f[i].name);}for (i = 0; i < 3; i++) {printf("%s\n", b[i].name);}
}
int cmp(const void* e1, const void* e2) {struct Ship* a = (struct Ship*)e1;struct Ship* b = (struct Ship*)e2;if(a->atk != b->atk){return b->atk - a->atk;}if(a->camp[0][1] != b->camp[0][1]){return b->camp[0][1] - a->camp[0][1];}return strcmp(a->name,b->name)>0?-1:1;
}
int main() {int n = 0;scanf("%d", &n);if (n < 6) {printf("NO");return 0;}int front = 0, behind = 0;int i = 0, j = 0;int keen[4] = { 0 };//喜爱程度 ,1白鹰,2铁血,3重樱,4皇家 for (i = 0; i < 4; i++) {scanf("%d", &keen[i]);}for (i = 0; i < n; i++) {scanf("%s %d %s %d\n", ship[i].name, &ship[i].atk, ship[i].type, &ship[i].camp[0][0]);//getchar();ship[i].camp[0][1] = keen[ship[i].camp[0][0] - 1];if (strcmp(ship[i].type, "DD") == 0 || strcmp(ship[i].type, "CA") == 0 || strcmp(ship[i].type, "CL") == 0) {f[front] = ship[i];front++;}else {b[behind] = ship[i];behind++;}}if (front < 3 || behind < 3) {printf("NO");return 0;}qsort(f, front, sizeof(struct Ship), cmp);qsort(b, front, sizeof(struct Ship), cmp);for (i = 0; i < 3; i++) {sum_atk += f[i].atk;sum_atk += b[i].atk;}Print();return 0;
}

【程序6】转义字符

1.打印 '\',要用 \\

2.打印 “ 或 " ,要用 \"

3.打印 %,要用 %%

#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#include<math.h>int main() {char a;scanf("%c",&a);printf("#include<stdio.h>\n");printf("int main()\n");printf("{\n");printf("    printf(\"%%c\\n\",'\\x%X');\n",a);printf("}\n");return 0;
}

【程序7】高效递归求组合数

int dfs(int m, int n) {if (m == 0 || n == 0 || m == n) {return 1;}if (n > m / 2) {n = m - n;}return dfs(m - 1, n - 1) * m / n;
}

【程序7】计算分子量

题目描述
已知氢的原子量为1,碳的原子量为12,氧的原子量为16,输入化学结构式/分子式,计算对应的分子量
例如:乙酸(醋酸)的分子式为CH3COOH,分子量为12+1×3+12+16+16+1=60

输入
分子式/结构式,长度不超过30,在分子式/结构式中只有字母和数字,
其中的字母只会出现三个大写字母CHO,另外在数值之前必然有字母。
测试数据有多组,处理到输入结束。

输出
输出分子量(正整数),每个输出占1行。

样例输入
H2
C
O2
CO2
H2O
CH4
CH3CH2OH
CH3COOH
CH3COOCH2CH3
C4H10
C12H22O11

样例输出
2
12
32
44
18
16
46
60
88
58
342
 

双指针

int check(char a,int n){if(n==0){n=1;}if(a == 'H'){return 1*n;}if(a=='C'){return 12*n;}if(a=='O'){return 16*n;}return 0;
}int Calc(char* s){int sum = 0;int n = 0;int i = 0;char* fast = s+1;char* slow = s;int span = '1' - 1;while(*slow){char num[5] = {0};i= 0;n = 0;while(*fast>='0'&&*fast<='9'){num[i++] = *fast;fast++;}for(int j = i-1;j>=0;j--){n+=(num[i-j-1]-span)*pow(10,j);}sum+=check(*slow,n);slow = fast;fast = slow + 1;}return sum;
}int main()
{char s[33] = {0};//试试gets while(scanf("%s",s)!=EOF){printf("%d\n",Calc(s));}return 0;
}

这篇关于“真我风采”程序竞赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati

未来工作趋势:零工小程序在共享经济中的作用

经济在不断发展的同时,科技也在飞速发展。零工经济作为一种新兴的工作模式,正在全球范围内迅速崛起。特别是在中国,随着数字经济的蓬勃发展和共享经济模式的深入推广,零工小程序在促进就业、提升资源利用效率方面显示出了巨大的潜力和价值。 一、零工经济的定义及现状 零工经济是指通过临时性、自由职业或项目制的工作形式,利用互联网平台快速匹配供需双方的新型经济模式。这种模式打破了传统全职工作的界限,为劳动