第十一届蓝桥杯大赛软件类省赛第二场C/C++研究生组

试题A:约数个数(5分)

第十一届蓝桥杯大赛软件类省赛第二场C/C++研究生组_第1张图片

题目代码

#include
using namespace std;
int main()
{
	int ans=0;
	for (int i = 1; i <= 78120; i++)
	{
		if (78120 % i == 0)
		{
			ans++;
		}
	}
	cout << ans << endl;

	return 0;
}

题目答案:96


试题B:寻找2020

第十一届蓝桥杯大赛软件类省赛第二场C/C++研究生组_第2张图片

题目分析

注意如何读取txt,并复制到二维数组
TXT文件
提取码:0416

题目代码

#include
using namespace std;
char text[500][500];
//读取txt文件
void copytext()
{
	char c[500];
	int line = 0;
	FILE* fp = fopen("find2020.txt", "r");
	if (fp == NULL)
	{
		printf("failed to open file!\n");
	}
	else
	{
		while (fgets(c, 500, fp))//按行读取fp到c
			strcpy(text[line++], c);
	}
	fclose(fp);
}
int main()
{
	int cnt = 0;
	copytext();
	//求每行2020的和
	for (int i = 0; i < 500; i++)
	{
		for (int j = 0; j < 500; j++)
		{
			if (text[i][j + 3] != NULL)
			{
				if (text[i][j] == '2' && text[i][j + 1] == '0' && text[i][j + 2] == '2' && text[i][j + 3] == '0')
				{
					cnt++;
				}
			}
			else
			{
				break;
			}
		}
	}
	//求每列2020的和
	for (int j = 0; j < 500; j++)
	{
		for (int i = 0; i < 500; i++)
		{
			if (text[i + 3][j] != NULL)
			{
				if (text[i][j] == '2' && text[i + 1][j] == '0' && text[i + 2][j] == '2' && text[i + 3][j] == '0')
				{
					cnt++;
				}
			}
			else
			{
				break;
			}
		}
	}
	for (int i = 0; i < 500; i++)
	{
		for (int j = 0; j < 500; j++)
		{
			if (text[i + 3][j + 3] != NULL)
			{
				if (text[i][j] == '2' && text[i + 1][j + 1] == '0' && text[i + 2][j + 2] == '2' && text[i + 3][j + 3] == '0')
				{
					cnt++;
				}
			}
			else
			{
				break;
			}
		}
	}
	printf("%d\n",cnt);
	return 0;
}

题目答案:16520


试题H:作物杂交

第十一届蓝桥杯大赛软件类省赛第二场C/C++研究生组_第3张图片
第十一届蓝桥杯大赛软件类省赛第二场C/C++研究生组_第4张图片
第十一届蓝桥杯大赛软件类省赛第二场C/C++研究生组_第5张图片

题目分析

vector,二维vector,dfs

题目代码

#include
#include
using namespace std;

//深度优先搜索
void dfs(vector<int>& cost, vector<vector<pair<int, int> > >& hybrid, vector<int>& t, int target)
{
	for (int i = 0; i < hybrid[target].size(); i++)
	{
		int a = hybrid[target][i].first;
		int b = hybrid[target][i].second;
		if (cost[a] == INT_MAX)//a未知,则搜索a
		{
			dfs(cost, hybrid, t, a);
		}
		if (cost[b] == INT_MAX)
		{
			dfs(cost, hybrid, t, b);
		}
		//t为a种植时间,cost为杂交到a所需的时间,取最小值是有可能target已知为0
		cost[target] = min(cost[target], max(t[a], t[b]) + max(cost[a], cost[b]));
	}
}


int main()
{
	int N, M, K, T;
	cin >> N >> M >> K >> T;
	vector<int> t(N+1);//stl,
	for (int i = 1; i <= N; i++)//读取每种作物的种植时间
	{
		cin >> t[i];
	}
	vector<int>cost(N + 1, INT_MAX);//把cost全赋值为INT_MAX
	int temp;
	for (int i = 0; i < M; i++)
	{
		cin >> temp;//读取已经存在的种子类型
		cost[temp] = 0;//已经存在的种子消耗的时间为0
	}
	int a, b, c;
	vector<vector<pair<int, int> > >hybrid(N + 1);//杂交方案,为二维vector
	for (int i = 0; i < K; i++)
	{
		cin >> a >> b >> c;
		pair<int, int>pa = make_pair(a, b);//a,b组合
		hybrid[c].push_back(pa);//c为下标
	}
	dfs(cost, hybrid, t, T);
	cout << cost[T] << endl;
	return 0;
}

其他题目与A组一样。
第十一届蓝桥杯大赛软件类省赛第二场C/C++大学A组

你可能感兴趣的:(蓝桥杯省赛)