LHL'PTA 实验3. 前8章实验综合训练(3) V1.0.1

2023-11-23 20:20
文章标签 综合 训练 实验 v1.0 pta lhl

本文主要是介绍LHL'PTA 实验3. 前8章实验综合训练(3) V1.0.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验3. 前8章实验综合训练(3)

7-1 计算平均成绩 (10分)
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。

输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。

输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。

输入样例:
5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60

输出样例:
80.00
zhang 00001
chen 21987


#include<stdio.h>
#include<string.h>
//思路:构造学生结构体,结构体成员有学号(id),姓名(name),成绩(score),然后定义结构体数组,
//      用于存储每个学生的信息,然后通过引用结构体成员的成绩对结构体中的每一个数组元素进行操作。struct student //构造学生结构体,即构造struct student这种数据类型
{char id[6];    //学号,由于题目要求五个数字组成的字符串所以需要申请足够的内存空间char name[11]; //姓名float score;   //成绩
};int main()
{struct student stu[10]; //定义结构体数组,用于存储每一个学生的学号、姓名、成绩int i, N;float sum = 0, average;scanf("%d\n", &N);for (i = 0; i < N; i++) //循环读入学生信息{scanf("%s%s%f", &stu[i].id, &stu[i].name, &stu[i].score);sum += stu[i].score;}average = sum / N;//LHL'PTA printf("%.2f\n", average);for (i = 0; i<N; i++)  //对学生成绩进行处理{if (stu[i].score < average){printf("%s %s\n", stu[i].name, stu[i].id);}}return 0;

在这里插入图片描述
7-2 组织星期信息 (10分)
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3) :
3
Tuesday
Wednesday
year

输出样例:
3
4
-1

#include<stdio.h>
#include<string.h>
int main()
{
int i,ri,repeat;
char *date[10]={“Sunday”,“Monday”,“Tuesday” ,“Wednesday”,“Thursday”,“Friday”,“Saturday”};
char str[80];scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
scanf("%s",str);
//LHL'PTA 
for( i=0;i<7;i++ ){if ( !strcmp( date[i] , str ) )///字符串的比较
break ;}
if ( i >= 7 )
printf("-1\n");
else
printf("%d\n" , i+1 );
}
}

7-3 删除重复字符 (10分)
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:
输出去重排序后的结果字符串。

输入样例:
ad2f3adjfeainzzzv

输出样例:
23adefijnvz

#include <stdio.h>
const int num= 256;
int main()
{char str[num];char *p = str;fgets(str,n,stdin);//字符串中含有回车int array[n] = {0};//定义大小为256的数组while(*p!='\n'){//LHL'PTA array[*p]++;//记录每个字符出现的次数p++;}int i = 0;while(i<num){if(array[i]){printf("%c",i);}i++;}return 0;
}

7-4 英文单词排序 (10分)
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:
blue
red
yellow
green
purple

输出样例:
red blue green yellow purple

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE * fp;
int i,m,j,k,d;
char ch[21][11];
int a[21],b[21];
if((fp=fopen("D:\\hnc.txt","a+"))==NULL){printf("File open error!\n");exit(0);
}//LHL'PTA 
for(i=j=0;;i++){ j=0;for(;;j++){fscanf(fp,"%c",&ch[i][j]);printf("%c",ch[i][j]);if(ch[i][j]=='\n'){break;}
}
a[i]=j;
b[i]=i;
if(ch[i][j-1]=='#'){break;}
}
k=i;
for(i=0;i<k-1;i++){m=i;for(j=i+1;j<k;j++){if(a[m]>a[j]){m=j;}}j=a[m];d=b[m];b[m]=b[i];b[i]=d;a[m]=a[i];a[i]=j;}for(i=j=0;k>0;k--,i++){for(j=0;j<a[i];j++){fprintf(fp,"%c",ch[b[i]][j]);printf("%c",ch[b[i]][j]);}//LHL'PTA fprintf(fp," ");printf(" ");}if(fclose(fp)){printf("Can not close the file!\n");exit(0);}return 0;

7-5 有理数加法 (10分)
本题要求编写程序,计算两个有理数的和。

输入格式:
输入在一行按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。

输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:
1/3 1/6

输出样例1:
1/2

输入样例2:
4/3 2/3

输出样例2:
2

#include<stdio.h>int gys(int a, int b){int t,c;if(a < b){t = b;b = a;a = t;}while(a != b){a = a - b;if(a < b){t = b;b = a;a = t;}}//LHL'PTA return a;
}
int gcd(int a, int b){return a*b/gys(a,b);
}
int main(){int a1,b1, a2, b2;char q,w;while(scanf("%d %c %d %d %c %d" , &a1,&q, &b1, &a2 ,&w, &b2) == 6){int s = gys(b1, b2);int d = gcd(b1, b2);//b1 = d;//b2 = d;a1 = a1 * (d / b1);a2 = a2 * (d / b2);int sum = a1 + a2;int a = gys(sum, d);sum = sum/a;d = d/a;if(d == 1){printf("%d\n", sum);}elseprintf("%d/%d\n", sum, d);}//LHL'PTA return 0;
}
1:求公约数的算法我用了辗转相减(因为思考量最少。。。),所以需要判断a,b的大小,然而如上的辗转相除(递归写法)就不需要,因为会自动调换过来
2:我用了求公约数再求公倍数,但是这是人算的时候比较方便,然而对于程序来说,直接将分母相乘要方便。
3:题中对于数的大小没有规定,但是学长们为了保险都用了long long
4:对于头文件以及一些简便的写法先写出来,这点值得借鉴

然而大神是这么写的#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <map>
#include <set>using namespace std;
#define For(i,l,r) for(int (i)=(int)(l);(i)<(int)(r);++(i))
#define FOR(i,l,r) for(int (i)=(int)(l);(i)<=(int)(r);++(i))
#define rof(i,l,r) for(int (i)=(int)(l);(i)>=(int)(r);--(i))
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned long long llu;
typedef unsigned int ui;//LHL'PTA ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);
}int main(){//   freopen("in.txt","r",stdin);ll a,b,c,d;scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);a=a*d+b*c;b*=d;ll g=gcd(a,b);printf("%lld",a/g);if(b/g!=1)printf("/%lld",b/g);puts("");return 0;
}

7-6 2017Final 圆周率山 (10分)
为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率。

已知圆周率为:3.

1415926535 8979323846 2643383279 5028841971 6939937510

5820974944 5923078164 0628620899 8628034825 3421170679

8214808651 3282306647 0938446095 5058223172 5359408128

4811174502 8410270193 8521105559 6446229489 5493038196

输入格式:
输入山的高度,为一个不超过10的正整数。

输出格式:
以上尖下宽,左右对称的三角形形式,给出圆周率的前若干位(不含小数点)。注意:每行均以数字结尾,即数字右边无空格。

输入样例1:
1

输出样例1:
3

输入样例2:
4

输出样例2:
3
141
59265
3589793


#include<iostream>
#include<string>
#include<iomanip>
#define PI "314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196"
using namespace std;
int main()
{    string str(PI);            //初始化字符串int height,weight,mark(0);        //height为高度,weight为底层的宽度,mark用于记录截取字符串的位置cin>>height;                    //输入高度weight=height*2-1;                //计算底层宽度string *p=new string[height];    //动态分配字符串组for(int i(0);i<height;i++)        //将字符串分层,每层有2*i+1个字符{*(p+i)=str.substr(mark,i*2+1);        //sting.substr(unsigned int pos, unsigned int n) 从字符串sting的下标为pos的字符开始,截取n个字符mark+=(i*2+1);}for(int i(0);i<height;i++)                //分层输出{cout<<setw(weight/2+i+1)<<setfill(' ')<<*(p+i)<<endl;        //每层占位wight/2+i+1个字符位,输出每层的字符串,其他的由空格填充}return 0;
}

7-7 通讯录排序 (10分)
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。

输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

输出样例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

//值得注意的是结构体间的交换,应该类型相同 
#include<stdio.h>
struct people{char name[10];int born;char number[20];	
}p[10],t;
int main(){int n,i,j;scanf("%d",&n);for(i=0;i<n;i++)scanf("%s %d %s",p[i].name,&p[i].born,p[i].number);for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)	if(p[j].born>p[j+1].born){t=p[j];p[j]=p[j+1];p[j+1]=t;}for(i=0;i<n;i++)//LHL'PTA printf("%s %d %s\n",p[i].name,p[i].born,p[i].number);return 0;
}

7-8 计算职工工资 (10分)
给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。

输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。

输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。

输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80

输出样例:
zhao 565.00
qian 430.00
zhou 630.00

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
struct gz
{char name[100];float jb;float fd;float zc;}g[1000];int main()
{int n,j,i,l,cnt=0;;cin>>n;//LHL'PTA for(i=0;i<n;i++){scanf("%s %f %f %f",g[i].name,&g[i].jb,&g[i].fd,&g[i].zc);printf("%s %.2f\n",g[i].name,g[i].jb+g[i].fd-g[i].zc);}return 0;
}

7-9 一帮一 (10分)
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:
输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:
8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例:
Amy Jack
Tom Linda
Bill Maya
Cindy John

#include <stdio.h>
#include <stdlib.h>int main()
{int n;int i, j;int sex[50];char name[50][20];int arr[50] = {0};
//LHL'PTA scanf("%d", &n);if(n < 0 || n > 50)exit(0);for(i = 0; i < n; i++){scanf("%d", &sex[i]);scanf("%s", name[i]);}for(i = 0; i < n; i++)//从左边遍历{for(j = n-1; j >= 0; j--)//从右边找最靠右的、复合标准的人{if(arr[i] == 0 && arr[j] == 0 && sex[i] != sex[j])//找出符合条件的人,没被输出过,并且性别不同{printf("%s %s\n", name[i], name[j]);arr[i] = 1;arr[j] = 1;}}}return 0;
}

7-10 最大子列和问题 (10分)
给定K个整数组成的序列{ N
​1
​​ , N
​2
​​ , …, N
​K
​​ },“连续子列”被定义为{ N
​i
​​ , N
​i+1
​​ , …, N
​j
​​ },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。

本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:

数据1:与样例等价,测试基本正确性;
数据2:102个随机整数;
数据3:103个随机整数;
数据4:104个随机整数;
数据5:105个随机整数;
输入格式:
输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。

输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。

输入样例:
6
-2 11 -4 13 -5 -2

输出样例:
20

#include<iostream>
using namespace std;int main(){int n;cin >> n;int num[n], j = 0, max = 0;for(int i = 0; i < n; i++){int x;cin >> x;if(x < 0)   num[j++] = x;else if (j > 0 && num[j-1] > 0){num[j-1] += x;}else{num[j++] = x;}if(j > 2 && x > 0 && num[j-1] > -num[j-2]){num[j-3] = num[j-3] + num[j-2] + num[j-1];num[j-1] = num[j-2] = 0;j = j - 2;}//LHL'PTA if(num[j-1] > max)  max = num[j-1];}cout << max;return 0;
}

V1.0.1修改了第六题 Π山的错误

这篇关于LHL'PTA 实验3. 前8章实验综合训练(3) V1.0.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的