#c #multidimensional-array
#c #многомерный массив
Вопрос:
Я столкнулся с этим вопросом на одном из экзаменов в нашем колледже. Никто из моих друзей не смог мне помочь. Я даже проверил все ведущие онлайн-платформы на предмет желаемых критериев вывода. Но бесполезно, поэтому я хотел опубликовать свой вопрос в Stack Overflow.
Я прошу людей, которые смотрят этот тег, помочь мне. Несмотря на то, что моя оценка была завершена, я с нетерпением пытаюсь решить эту проблему, но у меня не получилось.
#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 amp; column: ");
int p, q;
scanf("%d %d", amp;p, amp;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) форму.
Комментарии:
1. Хотя это допустимо для C , это намного лучше подходит для языка программирования C. Я оставил тег C , но вы, возможно, захотите его удалить. Visual Studio code и C 14 не имеют абсолютно никакого отношения к этому вопросу, поэтому я удалил их теги.
2. спасибо вам за это, сэр. Я новичок в сообществе stack overflow. Поэтому я приношу извинения за это
3. Как должен выглядеть вывод для других входных данных? Все, с чем нам нужно работать, — это приведенный код, и, по вашему собственному признанию, он не работает. Это затрудняет определение того, что должен делать код. Например, каким должен быть вывод, скажем, 10, 3?
Ответ №1:
Существует довольно аккуратное решение этой проблемы
for (int r = 0; r < numrows; r ) {
for (int c = 0; c < numcols; c ) {
if (r >= p amp;amp; c >= q amp;amp;
(c == q || c == numcols - 1 || r == p || r == numrows - 1)){
printf("- ",a[r][c]);
}
else {
printf(" ");
}
}
printf("n");
}
где numrows = 4
и numcols = 4
Комментарии:
1. Большое вам спасибо. ваш ответ был очень полезен.
Ответ №2:
Для начала нет необходимости объявлять вспомогательный массив, если задача состоит просто в выводе подмассива исходного массива.
Простой подход в 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( "- ", a[i][j] );
}
}
else
{
printf( "-", 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, a, row, col );
putchar( 'n' );
row = 0, col = 2;
rectangle_pattern( N, a, row, col );
putchar( 'n' );
row = 0, col = 3;
rectangle_pattern( N, a, row, 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
Объявление функции использует массив переменной длины в качестве параметра. Вы можете изменить объявление функции, объявляющее параметр как имеющий массив с фиксированным размером.
Комментарии:
1. Большое вам спасибо. ваш ответ был очень полезен.