面试题,有点难,求高手
面试题,有点难,求高手
螺旋数字队列
21 22 ……
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
看清上述数字的规律
以数字1为原点,X轴向右为正,y轴向上为正,建立数轴
那么数字2的坐标为(1,0),数字9的坐标为(1,1),数字5的坐标为(-1,-1)
现在编程实现输入一点(x,y),输出这点在数轴上对应的值
[解决办法]
#include <iostream>#include <iomanip>#include <algorithm>using namespace std;int main(){ int n ;// cin>>n; n=5; int **a = new int *[n]; for(int t=0;t<n;t++) a[t] = new int[n]; for(int i=0; i<n;i++) { for(int j=0; j<n;j++) a[i][j] = 0; } i=0; int j=n-1; int di=0; int dj=-1; for(int it = n*n; it>=1; it--) { a[i][j]=it; if(i+di>n-1||j+dj>n-1||j+dj<0||i+di<0||a[i+di][j+dj]) { dj = -dj; swap(di,dj); } i+= di; j+= dj; } for(i= 0; i<n;i++) { for(j=0;j<n;j++) cout<<setw(3)<<a[i][j]; cout<<endl; } cout<<endl; delete []a; return 0;}
[解决办法]
楼主;多写几圈,相信你自己就能看出规律了
[解决办法]
#include<stdio.h>
#define N 8
main()
{
int i,j,n=1,a[N][N];
for(i=0;i<=N/2;i++) // i 表示第几层
{
for(j=i;j<N-i;j++)
a[i][j] = n++;
for(j=i+1;j<N-i;j++)
a[j][N-i-1] = n++;
for(j=N-i-2;j>i;j--)
a[N-i-1][j] = n++;
for(j=N-i-1;j>i;j--)
a[j][i] = n++;
}
for(i=0;i<N;i++){
printf("\n\n");
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
}
}