如何解决如何通过用户输入将2D矩阵的元素打印为矩形
我在我们大学的一项评估中遇到了这个问题。我的朋友都无法帮助我。我什至检查了所有领先的在线平台的期望输出标准。但是没有用,所以我想在堆栈溢出中发布我的问题。
我请正在关注此标签的人来帮助我。尽管我的评估已经完成,但我还是很想解决这个问题,但我没有解决。
#include <stdio.h>
int main()
{
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int k,l,m,n,o,r;
int temp[4][4] = {0};
printf("Enter index of row & column: ");
int p,q;
scanf("%d %d",&p,&q);
for (int i = p; i < 4; i++)
{
for (int j = q; j < 4; j++)
{
temp[i][j] = a[i][j];
// initial given index number to left_most number
}
k = i + 1,l = 4 - q;
for (k; k <= l; k++)
{
temp[k][l] = a[k][l];
//rightmost element to bottom
}
m = k - 1,n = l - 1;
for (n; n >= q; n--)
{
temp[m][n] = a[m][n];
//bottomright to left elements upto the column index provided by user
}
o = m,r = q;
for (o; o >= i + 1; o--)
{
temp[o][r] = a[o][r];
//bottomleft to initial index element
}
break;
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
//if the element is zero then priting a space else printing the number
if (temp[i][j] == 0)
{
printf(" ");
}
else
{
printf("%d ",temp[i][j]);
}
}
printf("\n");
}
return 0;
}
样本输入: 输入行和列的索引:0 1
样本输出:
2 3 4
6 8
10 12
14 15 16
我的代码仅适用于示例输入和下面的列。
因此,我需要有关如何使我的代码适用于用户提供的任何输入的帮助,它必须打印出零(0)形状。
解决方法
有一个很好的解决此问题的方法
for (int r = 0; r < numrows; r++) {
for (int c = 0; c < numcols; c++) {
if (r >= p && c >= q &&
(c == q || c == numcols - 1 || r == p || r == numrows - 1)){
printf("%2d ",a[r][c]);
}
else {
printf(" ");
}
}
printf("\n");
}
其中numrows = 4
和numcols = 4
对于初学者来说,如果任务只是输出原始数组的子数组,则无需声明辅助数组。
使用C语言的一种简单方法可以看起来是这样的。
#include <stdio.h>
void rectangle_pattern( size_t n,int a[][n],size_t row,size_t col )
{
for ( size_t i = row; i < n; ++i )
{
if ( i == row || i == n - 1 )
{
for ( size_t j = col; j < n; j++ )
{
printf( "%2d ",a[i][j] );
}
}
else
{
printf( "%2d",a[i][col] );
if ( col != n - 1 ) printf( "%*d",( int )( 3 * ( n - col - 1 ) ),a[i][n-1] );
}
putchar( '\n' );
}
}
int main(void)
{
enum { N = 4 };
int a[N][N]=
{
{ 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 },{ 13,14,15,16 }
};
size_t row = 0,col = 0;
rectangle_pattern( N,a,row,col );
putchar( '\n' );
row = 0,col = 1;
rectangle_pattern( N,col );
putchar( '\n' );
row = 0,col = 2;
rectangle_pattern( N,col = 3;
rectangle_pattern( N,col );
putchar( '\n' );
return 0;
}
程序输出为
1 2 3 4
5 8
9 12
13 14 15 16
2 3 4
6 8
10 12
14 15 16
3 4
7 8
11 12
15 16
4
8
12
16
函数声明使用可变长度数组作为参数。您可以更改函数声明,以声明参数为具有固定大小的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。