继续攒人品ing~
没想到现在还有一场笔试,做得不是很顺手,题目难度感觉是我做过有史以来最大的,或者说最复杂的,web前端试卷居然禁用JS,而且只允许用C++和Java,还好之前遇到些人工不智能的评测机就用一下C++,加上本身就有点儿算法基础,还是死磕出了一道题。
题目描述,见图(emmmm,画得有点儿丑,excel+荧光笔画得),给定一个整数n,构造边长为n的矩形,第一圈是逆时针遍历,第二圈是顺时针,第三圈再是逆时针,然后给定坐标,输出值。
大体描述就是这样,我的思路还是比较麻烦的,光调试就调试了一个小时多,相信肯定会有其他简单算法的,代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stack>
#include <string.h>
#include <map>
using namespace std;
int a[101][101];
int n, m;
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &m);
int num = n/2;
int x = 0, y = 0;
int sum = 1;
int i;
for(i=1;i<=num;i++)
{
if(i%2==1)
{
while(y < n-(i-1))
{
a[x][y++] = sum++;
}
y--;
x++;
while(x < n-(i-1))
{
a[x++][y] = sum++;
}
x--;
y--;
while(y >= (i-1))
{
a[x][y--] = sum++;
}
y++;
x--;
while(x >= i)
{
a[x--][y] = sum++;
}
x++;
y++;
}
else
{
while(x<n-(i-1))
{
a[x++][y] = sum++;
}
x--;
y++;
while(y < n-i+1)
{
a[x][y++] = sum++;
}
y--;
x--;
while(x > (i-2))
{
a[x--][y] = sum++;
}
x++;
y--;
while(y > (i-1))
{
a[x][y--] = sum++;
}
x++;
y++;
}
}
if(n %2 == 1){
a[num][num] = sum;
}
while(m--)
{
int xx, yy;
scanf("%d %d", &xx, &yy);
printf("%d\n", a[xx][yy]);
}
}
return 0;
}
2020-09-27 WYHY 前端