首页 > 华为笔试第一题(STL方法太简单了)
头像
风哥哥1
编辑于 2020-08-22 11:50
+ 关注

华为笔试第一题(STL方法太简单了)


题目:

int main() {
	unordered_map<int ,pp> mapp;
	int m, n;
	while (cin >> m >> n) {
		vector<vector<int> > v;
		int count = 1;
		int l = 0, r = n - 1, t = 0, b = m - 1;
		while (1) {
			for (int i = l; i <= r; ++i) {
				//v[t][i] = count++;
				mapp.insert(make_pair(count++, pp(t, i)));
			}
			if (++t > b) break;
			for (int i = t; i <= b; i++) {
				mapp.insert(make_pair(count++, pp(i, r)));
			}
			if (--r < l) break;
			for (int i = r; i >= l; i--) {
				mapp.insert(make_pair(count++, pp(b, i)));
			}
			if (--b < t) break;
			for (int i = b; i >= t; i--) {
				mapp.insert(make_pair(count++, pp(i, l)));
			}
			if (++l > r) break;
		}
		cout << '[';
		for (auto x : mapp) {
			if (x.first % 10 == 7 && (x.first / 10) & 1) {
				cout<<'['<<x.second.first<<','<<x.second.second<<']';
			}
		}
		cout << ']';
	}
	return 0;
}

给你N行M列的人,他们是一个方阵。左上角是(0,0),右下角是(n-1, m-1),最外圈的人顺时针报数,当他们报的数个位是7并且十位是奇数,就选出来。外圈报完了内圈接着报,一直到所有人都报完,问最后选出来的是哪些。


要求是10<=n,m<=1000,如果输入不合法,那么就是返回空数组

输入

1
1010

输出

1
[[7,9],[1,1],[8,2],[7,5],[4,4]]

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐