数字旋转方阵c语言主函数,华为2019校招笔试题之旋转方阵(C语言版、python)

题目描述:

– 输入一个N阶方阵(0– 旋转举例:(如下四个三阶方阵从上到下为数字围绕中心顺时针旋转

1 2 3

4 5 6

7 8 9

7 4 1

8 5 2

9 6 3

9 8 7

6 5 4

3 2 1

3 6 9

2 5 8

1 4 7

输入描述:

(1) 输入第一行一个正整数N (0(2) 接下来N行每行N个整数用空格分开,为方阵的数据

(3) 接下来一行一个正整数M (0<=M<=10000)

说明:不用考虑异常输入,所有输入都是正常的,严格遵从取值范围

输出描述:

(1) N行,每行N个整数,用空格分开,为旋转后的数据

示例1:

– 输入

3

1 2 3

4 5 6

7 8 9

2

– 输出

9 8 7

6 5 4

3 2 1

c语言实现:

#include #include)

#include //包含动态内存分配函数。

void *input(int *p,int n)

{

int i;

for (i = 0; i < n*n; i++)

scanf("%d", &p[i]);//输入第i行第j列的数据。其中&p[i][j]也可以写作p[i]+j或者是 *(p+i) + j. 功能相同。

for (i = 0; i < n*n;)

{

printf("%d ", p[i]);//输出i行j列的元素。

i++;

if (i%n == 0)

printf("\n");//每行输入结束加换行符。

}

return p;

}

void *out(int *p, int n)

{

for (int i = 0; i < n*n; )

{

printf("%d ", p[i]);//输出i行j列的元素。

i++;

if (i%n == 0)

printf("\n");//每行输入结束加换行符

}

return 0;

}

void *rotate(int *p,int *temp, int t,int n)

{

int i = 0, j = 0;

for (; i < n*n; )

{

temp[i] = p[n*(n - 1) - n * (i%n) + j];

i++;

if (i%n == 0)

j++;

}

t--;

if (t == 0)

{

out(temp, n);

return 0;

}

else

rotate(temp,p,t,n);

}

int main(void)

{

int *p,*temp; //定义二维指针

int n,m,t, i,j;//行数和旋转次数

printf("输入矩阵维度:");

scanf("%d", &n); //输入行数和列数

p = (int *)malloc(sizeof(int *) *n*n);//申请指针空间。

temp = (int *)malloc(sizeof(int*) *n*n);

input(p, n);

printf("输入旋转次数:");

scanf("%d", &m);

t = m % 4;

if (t == 0)

out(p, n);

else

rotate(p, temp, t,n);

//释放内存

free(p);

free(temp);

system("pause");

return 0;

}

python实现:

def in_num(p, n):

print("输入矩阵同行数字用空格分隔,不同行则用回车换行:")

for i in range(n):

p[i] = input().split(" ") # //输入二维数组,同行数字用空格分隔,不同行则用回车换行

p[i] = [int(j) for j in p[i]] # // 将数组中的每一行转换成整型

return p

def rotate_out(p, q, m, n):

for i in range(n):

for j in range(n):

q[i][j] = p[n - j - 1][i]

m = m-1

if m == 0:

for i in range(n):

for j in range(n):

print((q[i][j]), end= " ")

print("")

else:

rotate_out(q, p, m, n)

n = int(input("输入矩阵维度n:")) #输入二维数组的行数和列数

p, q = [([0] * n) for _ in range(n)], [([0] * n) for _ in range(n)] #初始化二维数组

in_num(p, n)

m = int(input("输入旋转次数m:")) % 4

if m == 0:

for i in range(n):

for j in range(n):

print((q[i][j]), end= " ")

print("")

else:

rotate_out(p, q, m, n)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值