02才 2021-11-29 16:21 采纳率: 83.3%
浏览 133
已结题

如何输出方阵用C语言编译

从键盘输入一个n*n的方阵,将其中的n个最小值按升序存放在主对角线上并输出方阵
#include<stdio.h>

int main()
{
int i=0;
int j=0;
int tmp,n;
int arr[20];
printf("请输入您要排序的整数个数n(n<20): \n");
scanf("%d",&n);
printf("arr[%d]: ",n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[j]<arr[i])
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
}
printf("排序后的%d个整数:\narr[%d]: ",n,n);
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
我不知道该怎么写了

  • 写回答

1条回答 默认 最新

  • 关注

    刚才写了代码被删掉了。。。
    有两种方法实现:
    方法一:先排序,然后将最小的n个值逐个放入对角线,代码如下:

    img

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    //冒泡排序
    void bubble_sort(int a[],int n)
    {
        int i,j,t;
        for (i=0;i<n-1;i++)
        {
            for (j=0;j<n-1-i;j++)
            {
                if(a[j] > a[j+1])  //从小到大,升序
                {
                    t = a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
            }
        }
    }
    int main()
    {
        int *p;
        int i,j,n,k=1,t;
        scanf("%d",&n);
        p = (int*)malloc(sizeof(int)*n*n);
        for(i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
            {
                scanf("%d",&p[i*n+j]);
            }
        }
        //排序
        bubble_sort(p,n*n);
        //设置对角线
        for (i=1;i<n;i++)
        {
            for (j=1;j<n;j++)
            {
                if(i==j)
                {
                    t = p[i*n+j];
                    p[i*n+j] = p[k];
                    p[k] = t;
                    k++;
                }
            }
        }
        //输出
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
            {
                printf("%4d",p[i*n+j]);
            }
            printf("\n");
        }
        //释放空间
        free(p);
        p=0;
        return 0;
    }
    
    

    方法二:输入后,找到最小值放入a[0][0],然后找次小值放入a[1][1],以此类推,代码如下:

    img

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int **a;
        int i,j,n,k,t,min;
        int indexi,indexj;
        scanf("%d",&n);
        a = (int**)malloc(sizeof(int*)*n);
        for(i=0;i<n;i++)
        {
            a[i]=(int*)malloc(sizeof(int)*n);
            for(j=0;j<n;j++)
                scanf("%d",&a[i][j]);
        }
        for (k=0;k<n;k++)
        {
            min = a[k][k];
            indexi = indexj = k;
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    if(k==0)
                    {
                        if(a[i][j]<min)
                        {
                            min = a[i][j];
                            indexi = i;
                            indexj = j;
                        }
                    }else
                    {
                        if(a[i][j]<min && a[i][j]>a[k-1][k-1])
                        {
                            min = a[i][j];
                            indexi = i;
                            indexj = j;
                        }
                    }
                }
            }
            //
            t = a[k][k];
            a[k][k] = a[indexi][indexj];
            a[indexi][indexj] = t;
        }
    
        //输出
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
            {
                if(j<n-1)
                    printf("%d ",a[i][j]);
                else
                    printf("%d\n",a[i][j]);
            }
        }
        //释放空间
        for (i=0;i<n;i++)
        {
            free(a[i]);
            a[i]=0;
        }
        free(a);
        a=0;
        return 0;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题