今天做了华为机考题,第一题
给定一个二维数组,M行N列
顺时针从1开始报数,选出个位数为7,十位数为奇数的数,并按报数顺序输出出来
题目大概就是这样,这个题目和剑指offer的29题:顺时针打印矩阵非常相似
以下代码把给的例子输入进去结果是正确的,但是给定的输出格式不对,导致0%,好气
#include <iostream>
using namespace std;
void selectpeople(int M,int N);
void GoCircle(int **numbers,int m,int n,int start);
bool check(int result);
int data = 1;
int main()
{
int m,n;
cin >> m >> n;
selectpeople(m,n);
system("pause");
return 0;
}
void selectpeople(int M,int N)
{
if (M<=0 || N <=0)
{
return;
}
int start = 0;
int **numbers = (int **)malloc(sizeof(int*)*M);
for (int i=0;i < N;i ++)
{
numbers[i] = (int*)malloc(sizeof(int)*N);
}
for (int i=0;i < M;i ++)
{
for (int j=0;j < N;j ++)
{
numbers[i][j] = 0;
}
}
while (M>start*2 && N>start*2)
{
GoCircle(numbers,M,N,start);
start++;
}
}
void GoCircle(int **numbers,int m,int n,int start)
{
bool flag = true;
int rows = n-1-start;
int cols = m-1-start;
//从左向右
for (int i = start;i <=rows;i ++)
{
numbers[start][i] = data;
if (check(data))
cout <<"[" << start << "," << i<<"]";
data++;
}
//从上到下
if (start < cols)
{
//列
for (int i=start+1;i<=cols;i++)
{
numbers[i][cols]=data;
if (check(data))
cout <<"[" << i << "," << cols<<"]";
data++;
}
}
//从右向左
if (start<rows && start < cols)
{
for (int i=rows-1;i >=start;i--)
{
numbers[cols][i] = data;
if (check(data))
cout <<"[" << cols << "," << i<<"]";
data++;
}
}
//从下到上
if (start < rows && start < cols-1)
{
for (int i=cols-1;i >=start+1;i--)
{
numbers[i][start] = data;
if (check(data))
cout <<"[" << i << "," << start<<"]";
data++;
}
}
}
bool check(int result)
{
int result2;
if (result>=10)
{
result2 = result/10;
if (result%10==7&&(result2%10)%2!=0)
return true;
}
return false;
}