zoukankan      html  css  js  c++  java
  • YTU 2418: C语言习题 矩阵元素变换

    2418: C语言习题 矩阵元素变换

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 293  解决: 155

    题目描述

    将一个n×n(2<n<10,n为奇数)的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、从上到下顺序依次从小到大存放),写一
    函数实现。用main函数调用。

    输入

    输入n和矩阵中的每个元素

    输出

    变换后的矩阵

    样例输入

    5
    25 13 9 5 1
    16 17 18 19 6
    15 24 4 20 7
    14 23 22 21 8
    2 12 11 10 3

    样例输出

    1 13 9 5 2 
    16 17 18 19 6 
    15 24 25 20 7 
    14 23 22 21 8 
    3 12 11 10 4 

    提示

    主函数已给定如下,提交时不需要包含下述主函数



    /* C代码 */

    int main()

    {

        void change(int *,int );

        int **a,*p,i,j;

        int n;

        scanf("%d",&n);

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

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

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

            a[i]=p+n*i;

        for (i=0; i<n; i++)                     //输入矩阵

            for (j=0; j<n; j++)

                scanf("%d",&a[i][j]);

        change(p,n);                              //调用函数,实现交换

        for (i=0; i<n; i++)                    //输出已交换的矩阵

        {

            for (j=0; j<n; j++)

                printf("%d ",a[i][j]);

            printf(" ");

        }

        free(p);

        free(a);

        return 0;

    }



    /* C++代码 */



    int main()

    {

        void change(int *,int );

        int **a,*p,i,j;

        int n;

        cin>>n;

        p=new int[n*n];

        a=new int*[n];

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

            a[i]=p+n*i;

        for (i=0; i<n; i++)                     //输入矩阵

            for (j=0; j<n; j++)

                cin>>a[i][j];

        change(p,n);                           //调用函数,实现交换

        for (i=0; i<n; i++)                    //输出已交换的矩阵

        {

            for (j=0; j<n; j++)

                cout<<a[i][j]<<" ";

            cout<<endl;

        }

        delete []p;

        delete []a;

        return 0;

    }



    迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……

    #include <iostream>
    using namespace std;
    void change(int *k,int p)
    {
        int t,*min,*max,i,j;
        min=max=k;
        for(i=0; i<p; i++)
            for(j=0; j<p; j++)
            {
                if(*(k+p*i+j)<*min)
                    min=k+p*i+j;
                else if(*(k+p*i+j)>*max)
                    max=k+p*i+j;
            }
        t=*max;
        *max=*(k+(p*p)/2);
        *(k+(p*p)/2)=t;
        t=*min;
        *min=*k;
        *k=t;
        min=&*(k+1);
        for(i=0; i<p; i++)
            for(j=0; j<p; j++)
                if((k+p*i+j)!=k)
                    if(*(k+p*i+j)<*min)
                        min=k+p*i+j;
        t=*min;
        *min=*(k+p-1);
        *(k+p-1)=t;
        min=&*(k+1);
        for(i=0; i<p; i++)
            for(j=0; j<p; j++)
                if((k+p*i+j)!=(k+p-1)&&(k+p*i+j)!=k)
                    if(*(k+p*i+j)<*min)
                        min=k+p*i+j;
        t=*min;
        *min=*(k+p*(p-1));
        *(k+p*(p-1))=t;
        min=&*(k+1);
        for(i=0; i<p; i++)
            for(j=0; j<p; j++)
                if((k+p*i+j)!=k&&(k+p*i+j)!=(k+p-1)&&(k+p*i+j)!=(k+p*(p-1)))
                    if(*(k+p*i+j)<*min)
                        min=k+p*i+j;
        t=*min;
        *min=*(k+p*p-1);
        *(k+p*p-1)=t;
    }
    int main()
    {
        void change(int *,int );
        int **a,*p,i,j;
        int n;
        cin>>n;
        p=new int[n*n];
        a=new int*[n];
        for(i=0; i<n; i++)
            a[i]=p+n*i;
        for (i=0; i<n; i++)
            for (j=0; j<n; j++)
                cin>>a[i][j];
        change(p,n);
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
                cout<<a[i][j]<<" ";
            cout<<endl;
        }
        delete []p;
        delete []a;
        return 0;
    }

  • 相关阅读:
    学习jQuery必须知道的几种常用方法
    Jquery技巧总结
    代码测试
    NOIP2003 神经网络
    NOIP2003 传染病控制
    NOIP2003 加分二叉树
    NOIP2004 虫食算
    NOIP2004 合唱队列
    NOIP2004 合并石子
    NOIP2004 津津的储蓄计划
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989454.html
Copyright © 2011-2022 走看看