牛客竞赛语法入门班数组字符串习题
重点题:
1013 打印质数表(素数筛法)
1019 扫雷(初级搜索)
1013 打印质数表
#includeusing 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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)