牛客竞赛语法入门班数组字符串习题C++版本参考代码及部分解析
牛客竞赛语法入门班数组字符串习题
重点题:
1013 打印质数表(素数筛法)
1019 扫雷(初级搜索)
1013 打印质数表
#include
using namespace std;
int prime[2010];
int main()
{int n;cin >> n;for (int i = 2;i <= n;i++)//从2开始判断{if (prime[i] == 0) {cout << i << " ";for (int j = i + i;j <= n;j += i)prime[j] = 1;}}return 0;
}
1019 扫雷
(可以使用方向数组改进,DFS中常用)
#include
#include
using namespace std;char a[1010][1010];
int cnt;//cnt表示当前位置的八个方向一共有多少个地雷int main()
{int n,m;cin >> n >> m;for (int i = 1;i <= n;i++)for (int j = 1;j <= m;j++)cin >> a[i][j];for (int i = 1;i <= n;i++)//数组下标从1开始,相当于给数组加上一个边框,防止越界{for (int j = 1;j <= m;j++){if (a[i][j] == '*') continue;//遇到地雷,跳过该点cnt = (a[i - 1][j - 1] == '*') + (a[i - 1][j] == '*') + (a[i - 1][j + 1] == '*')+ (a[i][j - 1] == '*') + + (a[i][j + 1] == '*')+(a[i + 1][j - 1] == '*') + (a[i + 1][j] == '*') + (a[i + 1][j + 1] == '*');a[i][j] = cnt + '0';//将int类型的cnt转换为字符类型}}for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){cout << a[i][j];}puts("");} return 0;
}
改进之后的代码:
#include
#include using namespace std;int cnt;
char a[1010][1010];
int dir[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};int main()
{int n,m;cin >> n >> m;for (int i = 1;i <= n;i++)for (int j = 1;j <= m;j++)cin >> a[i][j];for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){if (a[i][j] == '*') continue;cnt = 0;for (int k = 0;k < 8;k++){if (a[i + dir[k][0]][j + dir[k][1]] == '*') cnt++;}a[i][j] = cnt + '0';}}for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){cout << a[i][j];}puts("");} return 0;
}
1032 [NOIP2007] 奖学金
#include
#include
using namespace std;
struct student
{int id;int chi_score;int math_score;int e_score;int sum_score;
}s[310];
bool cmp(student a,student b)
{if (a.sum_score != b.sum_score) return a.sum_score > b.sum_score;if (a.sum_score == b.sum_score && a.chi_score != b.chi_score) return a.chi_score > b.chi_score;return a.id < b.id;
}
int main()
{int n;cin >> n;for (int i = 1;i <= n;i++)//注意学号无0号,从下标1开始存储{cin >> s[i].chi_score >> s[i].math_score >> s[i].e_score;s[i].sum_score = s[i].chi_score + s[i].math_score + s[i].e_score;s[i].id = i;}sort(s + 1,s + n + 1,cmp);for (int i = 1;i <= 5;i++) cout << s[i].id << " " << s[i].sum_score << endl;return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
