【问题标题】:Moving parts right in two - dimensional matrix在二维矩阵中向右移动部件
【发布时间】:2013-09-18 06:07:37
【问题描述】:

我希望得到您的帮助以了解和完成我的程序。

这是我必须做的:

“你必须锻炼计划:
第一的。一个吸收二维整数arr [M] [N]。 M - 行数 N - 列数。 (矩阵大小是从用户那里收到的)
二。程序使用辅助函数“shift”将矩阵的值向右移动一位,如图(输入2代替1,输入3代替2,输入4代替3,... 20代替19,第一名 20).
Shift必须写一个函数,在样本矩阵循环中调用她3次.."

示例

我的问题是:

  1. 我不知道如何处理用户输入的矩阵二维整数数组。我只知道行的定义大小和列
  2. 我的功能与真正的交易不符,所以我希望得到帮助来完成我的功能。

我的输出:

我的代码:

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define M 4
#define N 5
void shift (int arr[M][N], int length); 

void main()
{
    int arr[M][N];
    int i,j,length;

    printf("Enter %d rows \n",M);
    for (i=0 ; i<M ; i++ )
    {
        printf("Enter %d numbers:\n",N);
        for(j=0 ; j<N ; j++ )
        { 
            scanf("%d" , &arr[i][j] );
        }
    length=N+M;
    }
    shift (arr,length);
    system("pause");
    return ;
}

void shift (int arr[M][N], int length) 
{    
    int i,j,temp;
    temp=arr[0][0];
    for(i=0; i<M; i++)
    {
             for(j=0; j<N-1 ; j++)
             {
                 printf("%d ",arr[i][j]);

             }
             arr[i][j]=temp;
             printf("\n");
    }
} 

编辑:调整图片大小

【问题讨论】:

  • 那些图片包含太多的空白...

标签: c arrays matrix


【解决方案1】:
Shifts all columns to the right. 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


void shift_columns_right(int M[100][100], int rows, int cols) {

    int tmp_lastcol;
    int j, k;

    for (j = 0; j<rows; j++){
        tmp_lastcol = M[j][cols-1];
        for (k = cols-1;  k > 0; k-- ){
            M[j][k] = M[j][k-1];
        }
        M[j][0] = tmp_lastcol;
    }

}
int main(void){

    int B[100] [100] = { 
                   {1,2,3,4}, 
                   {5,6,7,8}, 
                   {9,10,11,12}, 
                   {13,14,15,16}, 
                   {17,18,19,20}, 
    };

    shift_columns_right(B,5,4);

    return 0;

}

【讨论】:

    【解决方案2】:

    我会提示您如何移动元素。逻辑是在迭代时交换行中当前元素和最后一个元素之间的元素。我将向您展示一个关于一维数组的工作示例。

    #include <stdio.h>
    
    #define ARRAY_SIZE 5
    
    int main()
    {
        int a[ARRAY_SIZE] = {11,22,33,44,55};
        int i;
    
        for (i=0; i<ARRAY_SIZE; ++i)
        {
            int temp = a[i];
            a[i] = a[ARRAY_SIZE-1];
            a[ARRAY_SIZE-1] = temp;
        }
    
        for(i=0; i<ARRAY_SIZE; ++i)
        {
            printf("%d\t",a[i]);
        }
    
        return 0;
    }
    

    输出:55 11 22 33 44

    要为数组动态分配内存,请使用malloc。希望对您有所帮助!

    【讨论】:

    • 感谢您的提示。但我的问题是如何设置二维数组。我想获得一篇文章或其他东西来更多地了解这个主题
    • 只要谷歌一下如何动态分配一个二维数组,你就会被结果淹没。关于二维数组的交换,您所要做的就是添加另一个循环来迭代我的逻辑中的其他行。
    • 嘿马赛什!我有一个问题想得到你的帮助
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多