当前位置: 首页 > news >正文

青少年软件编程(C语言)等级考试试卷(三级)

分组均衡性

在上机实验课上,老师将所有学生排列为 n 排,每排坐 m 个学生。每个学生有左右两个邻座(除了这一排的左右两端)。每个人可以和自己的邻座互相帮助完成实验。除了每排左右两端的学生,中间的每个学生都可以同时与两个邻座分别协作。

由于每个学生的个人能力不同,假设协作产生的小组能力值是两个协作学生的能力值之和,老师希望知道,自己给出的座位安排在多大程度上是“均衡”的 —— 所谓分组均衡性,是指所有可能组成的协作小组的能力值的最大值与最小值之差。

给定一张座位安排表,请计算这个安排的分组均衡性。

时间限制:1000

内存限制:65536

输入

输入第一行给出 2 个正整数 n 和 m(2 ≤ n, m ≤ 100),依次为座位的排数和每排的人数。 随后 n 行,每行给出 m 个数字,代表对应座位上学生的能力值(为区间 [1, 100] 内的整数)。同行数字间以空格分隔。

输出

在一行中输出分组均衡性。

样例输入

3 5
10 80 30 95 60
79 55 63 84 41
98 23 72 85 58

样例输出

67

提示

样例解释:最强组合是第 3 排的 72+85=157;最弱组合是第 1 排的 10+80=90。因此两者之差为 67。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a[110][110];
	int n,m;
	cin>>n>>m;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	int f = 0;
	int p = 9999999;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m-1;j++)
		{
			int x = a[i][j] + a[i][j+1];
			f = max(f,x);
			p = min(p,x);
		}
	}
	cout<<f-p;
	return 0;
}

增高垫

网传最大号的增高垫有 16 厘米,可以一下把 1.64 米的男孩变成一米八的大汉,不少对自己身高缺乏自信的男生女生会悄悄买来穿,特别是大家站成一排拍照的时候。

假设准备拍照的一排人中,只要有人看到身边紧挨着的人比自己高,就会忍不住穿增高垫,并且一定要比人家多穿一层。你的任务就是在看过这一排人的身高后,算出谁穿了最多层的增高垫。

时间限制:1000

内存限制:65536

输入

输入首先在第一行给出正整数 n(≤ 104),为一排人的个数。随后一行给出 n 个正整数,表示 n 个人的身高(厘米)。每个数值是不超过 300 的正整数,数字间以空格分隔。

输出

在一行中输出穿了最多层增高垫的人的位置和穿的层数(位序从左到右,从 1 开始)。如果有并列,按从左到右的顺序,每个人的信息占一行。

样例输入

10
150 160 186 200 170 175 180 186 186 183

样例输出

1 3
5 3
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a[10001];
	int b[10001];
	int c[10001];
	int n;
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i];
	}
	b[0] = 1;
	b[n+1] = 1;
	int cnt = 0;
	for(int i = 1;i<=n;i++)
	{
		if(a[i]>=a[i+1] && a[i]>=a[i+1]) b[i] = 1;
	}
	for(int i = n+1;i>=0;i--)
	{
		if(b[i]==1)
		{
			cnt = 0;
		}
		c[i] = cnt;
		cnt++;
	}
	int ma = -1;
	for(int i = 1;i<=n;i++)
	{
		ma = max(ma,c[i]);
	}
	for(int i = 1;i<=n;i++)
	{
		if(c[i] == ma)
		{
			cout<<i<<" "<<c[i]<<endl;
		}
	}

	return 0;
}

三元组的离心力

三元组 (a,b,c) 的“离心力”定义为 |a-b|+|b-c|+|c-a|。现给定三个非空的整数集合 S1、S2、S3,请你找出所有跨这三个集合的三元组 (a,b,c)(即 a∈ S1,b∈ S2,c∈ S3)的最小离心力。

时间限制:1000

内存限制:65536

输入

输入第一行给出三个不超过 104 的正整数 n1、n2、n3,依次为集合 S1、S2、S3 中元素的个数(注意一个集合内没有相同的元素)。随后三行,顺次给出三个集合的元素,均为 [-104 , 104] 内的整数。同行数字间以空格分隔。

输出

在一行中输出 `LiXinLi(a, b, c) = d`,其中 `(a, b, c)` 是具有最小离心力的三元组,`d` 是对应的离心力。如果解不唯一,输出那个最大的解。 注意:(a1,a2,a3)>(b1,b2,b3) 是指,存在 1 ≤ k ≤ 3 使得 ai=bi 对 1 ≤ i < k 成立,并且 ak > bk。

样例输入

4 4 6
0 9 -1 11
10 -25 11 -10
9 2 41 17 12 30

样例输出

LiXinLi(11, 11, 12) = 2

提示

注意到样例实际上有两组解,另外一组解是 (9, 10, 9)。因为 (11, 11, 12) 比较大,所以输出的是这组解。

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
int n1,n2,n3;
int a[110];
int b[110];
int c[110];
int x,y,z = 0;
int main()
{
	cin>>n1>>n2>>n3;
	for(int i = 0;i<n1;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n2;i++)
	{
		cin>>b[i];
	}
	for(int i = 0;i<n3;i++)
	{
		cin>>c[i];
	}
	int p = 9999;
	for(int i = 0;i<n1;i++)
	{
		for(int j = 0;j<n2;j++)
		{
			for(int k = 0;k<n3;k++)
			{
				p = min(p,(a[i]-b[j])+(b[j]-c[k])+(c[k]-a[i]));
				x = a[i];
				y = b[j];
				z = c[z];
			}	
		}
	}
	cout<<"lixinli"<<"("<<x<<","<<y<<","<<z<<")"<<" "<<"="<<" "<<p;
	return 0;
}

分玩具

已知 n 位小朋友对 m 件玩具的喜好(n ≤ m),现要将 m 件玩具分给 n 位小朋友,每位小朋友只能分到 1 件玩具,每件玩具也最多只能分给 1 位小朋友,并且还要求每位小朋友都能分到自己喜欢的玩具。

本题请你对任意 n 和 m 尝试列出所有满足要求的方案。

时间限制:5000

内存限制:65536

输入

输入第一行给出两个正整数 n 和 m(n ≤ m ≤ 8),即小朋友人数和玩具的数量。 随后 n 行,每行给出 m 个数字。其中第 i 行第 j 个数字为 1 表示第 i 位小朋友喜欢第 j 件玩具,为 0 则表示不喜欢。

输出

按升序列出所有满足要求的方案,格式为 (s1, … , sn)。其中 si 表示第 i 位小朋友分到了第 si 件玩具。 注:方案 (a1, … , an) < (b1, … , bn) 是指存在 1 ≤ k ≤ n,使得 ai = bi 对所有 1 ≤ i< k 成立,并且有 ak < bk。

样例输入

4 5
0 1 0 0 1
1 1 0 1 0
1 0 1 1 0
0 0 0 1 1

样例输出

(2, 1, 3, 4)
(2, 1, 3, 5)
(2, 1, 4, 5)
(2, 4, 1, 5)
(2, 4, 3, 5)
(5, 1, 3, 4)
(5, 2, 1, 4)
(5, 2, 3, 4)
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
int a[10];
bool b[10];
bool c[10][10];
int n,m;
void func(int k);
int main()
{
	cin>>n>>m;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>c[i][j];
		}
	}
	func(1);
	return 0;
}
void func(int k)
{
	if(k>n)
	{
		cout<<"(";
		for(int i = 1;i<=n;i++)
		{
			cout<<a[i]<<",";
		}
		cout<<")"<<endl;
		return;
	}
	for(int i = 1;i<=m;i++)
	{
		if(b[i] == 0 && c[k][i] == 1)
		{
			a[k] = i;
			b[i] = 1;
			func(k+1);
			b[i] = 0;
		}
	}
}

相关文章:

  • WP Mail 邮件发送:WordPress Mail SMTP设置
  • Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
  • 《剑指数据库:MySQL玄阶查术秘典·下卷》
  • C++——类和对象
  • Dear ImGui for Unity 常见问题解决方案
  • 【Agent】OpenManus-Prompt组件详细分析
  • 【安全运营】关于攻击面管理相关概念的梳理(一)
  • Burp Suite从入门到实战之配置启动
  • 【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解
  • 如何高效备考蓝桥杯(c/c++)组
  • 蓝桥杯python编程每日刷题 day 21
  • 我的机器学习学习之路
  • 手机蓝牙项目
  • 《构建有效的AI代理》学习笔记
  • QT五 文件系统,QFile,QfileInfo
  • Go 语言规范学习(5)
  • 关于gige与MFC的界面交互
  • 【Python3.12.9安装llama-cpp-python遇到编译报错问题解决】
  • 【Linux网络#14】:数据链路层(以太网 局域网通信 ARP协议 ARP 欺骗 DDos 攻击)
  • 云数据库概念
  • 网站建设招标公示/谷歌优化工具
  • 做盗版视频网站吗/雷神代刷网站推广
  • 做特价网站/游戏优化是什么意思
  • 自己搭建网站做网上商城/长沙关键词自然排名
  • 企业网站建设分析/电商推广平台
  • 南京网站制作招聘/在线子域名二级域名查询工具