试题A:约数个数(5分)
题目代码
#include<iostream>
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
题目分析
注意如何读取txt,并复制到二维数组
TXT文件
提取码:0416
题目代码
#include<bits/stdc++.h>
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:作物杂交
题目分析
vector,二维vector,dfs
题目代码
#include<iostream>
#include<vector>
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组