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

2025年3月电子学会c++五级真题

结绳

#include <bits/stdc++.h>
using namespace std;

int n,a[10010];



int main()
{
	
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	sort(a+0,a+n);//将a数组从小到大排序
	
	double sum = 0;
	for(int i = 0;i<n;i++)
	{
		sum = (sum+a[i])/2;
	}
	cout<<(int)sum;
	
	
	return 0;
}

最大乘积和

(思路:使用回溯算法(深搜DFS)) 

#include <bits/stdc++.h>
using namespace std;

int a[100010],b[100010];
int ca[100010],cb[100010];
int n,m;
int ma;

void aaa(int);
int main()
{
	
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	cin>>m;
	for(int i = 0;i<m;i++)
	{
		cin>>b[i];
	}
	
	aaa(0);
	cout<<ma;
	
	return 0;
}
void aaa(int sum)
{
	ma = max(ma,sum);
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			if(ca[i]==0&&cb[j]==0)
			{
				ca[i] = 1;
				cb[j] = 1;
				aaa(sum+a[i]*b[j]);
				ca[i] = 0;
				cb[j] = 0;
			}
		}
	}
	
}

从A到B

(思路:使用广度优先搜索算法BFS(广搜))

#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,v;
	bool f = true;
	node(){};
	node(int aa,int bb)
	{
		x = aa;
		v = bb;
	}
};
node que[200020];
int head,tail;

int f[200020];
int a,b,n;


int main()
{
	
	int t;
	cin>>t;
	while(t!=0)
	{
		head = 0;
		tail = 0;
		for(int i = 0;i<200020;i++)
		{
			f[i] = 0;
		}
		
		cin>>a>>b>>n;
		a += 100010;
		b += 100010;//两个“+100010”是为了加上负数(数轴上的数整体往右移100010个单位长度)
		que[++tail] = {a,0};
		f[a] = 1;
		bool ff = false;
		while(head<tail)
		{
			head++;
			for(int i = 0;i<3;i++)
			{
				int tx;
				if(i==0) tx = que[head].x+1;
				else if(i==1) tx = que[head].x-1;
				else tx = (que[head].x-100010)*n+100010;
				if(tx>=0&&tx<200020&&f[tx]==0)
				{
					f[tx] = 1;
					que[++tail] = {tx,que[head].v+1};
				}
				
				if(que[tail].x==b)
				{
					cout<<que[tail].v<<endl;
					ff = true;
					break;
				}
			}
			if(ff==true) break;
		}
		t--;
	}
	
	
	return 0;
}

#include <bits/stdc++.h>
using namespace std;

int m,n,a[110],b[110];
int ff[110];
bool fff = false;

void aaa(int);

int main()
{
	
	cin>>m;
	for(int i = 0;i<m;i++)
	{
		if(i*(i-1)/2==m)
		{
			n = i;
			break;
		}
	}
	for(int i = 0;i<m;i++)
	{
		cin>>a[i];
	}
	sort(a+0,a+m);//将a数组从小到大排序
	
	b[0] = 0;//确定首个收费站的位置
	b[n-1] = a[m-1];//确定尾个收费站的位置
	
	aaa(1);
	
	return 0;
}
void aaa(int x)
{
	if(x==n-1)
	{
		int aa[110] = {0};
		int la = 0;
		for(int i = 0;i<n;i++)
		{
			for(int j = i+1;j<n;j++)
			{
				aa[la] = b[j]-b[i];
				la++;
			}
		}
		sort(aa+0,aa+la);//将aa数组从小到大排序
		bool f = true;
		for(int i = 0;i<m;i++)
		{
			if(a[i]!=aa[i])
			{
				f = false;
				break;
			}
		}
		if(f==true)
		{
			fff = true;
			for(int i = 0;i<n-1;i++)
			{
				cout<<b[i]<<" ";
			}
			cout<<b[n-1];
			return;
		}
		return;
	}
	
	for(int i = 0;i<n;i++)
	{
		int bb = b[x-1]+a[i];
		if(ff[bb]==0)
		{
			b[x] = bb;
			ff[bb] = 1;
			aaa(x+1);
			ff[bb] = 0;
		}
		if(fff==true) return;
	}
	
	return;
}


http://www.kler.cn/a/614921.html

相关文章:

  • 18-动规-子序列中的 k 种字母(中等)
  • 一些需要学习的C++库:CGAL和Eysshot
  • 数巅科技首发企业级 Multi-Agent 框架 AskBot —— 探索企业数据领域的 AGI 初级形态
  • 【蓝桥杯速成】| 15.完全背包
  • Layui实现table动态添加行,可删除、表格可编辑,小数校验
  • Android ViewModel学习总结(源码级理解)
  • python 如何打包成exe文件
  • 可拖动对象编辑器使用指南
  • 【Linux】了解基础指令(超详细)
  • Python3基础库入门(个人学习用)
  • Epoll 的本质与原理:高性能网络编程的基石
  • 调用 DeepSeek制作简单的电子宠物
  • 区块链技术在投票系统中的应用:安全、透明与去中心化
  • Linux CentOS 7 搭建我的世界服务器详细教程 (丐版 使用虚拟机搭建)
  • 横扫SQL面试——连续性登录问题
  • 【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页
  • AIDD-人工智能药物设计-利用自动化机器学习(AutoML)方法促进计算机模拟的ADMET特性预测
  • 破界·共生:生成式人工智能(GAI)认证重构普通人的AI进化图谱
  • 【KEIL5.3.7以上版本ARM compiler5 version】
  • 【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher