C语言【二维数组】矩阵问题(XDOJ)
补充知识
指向二维数组的指针
int a[3][4];
int (p)[4] //行指针,指向有四个列元素的一维数组(列不可缺省)
p=a;p=a[0];p=a[1];
p[i][j]<=>(p[i]+j)<=>((p+i)+j)<=>*(p+i)[j]
推荐使用p[i][j]
地址概念
- a[0],a[1]–一维数组名,数组名代表元素首地址
- a[0]<->&a[0][0] a[1]<->&a[1][0]
实际应用
实际应用中,一维数组也能实现矩阵输出,如前两个例子
S型/之字排序
%3d格式控制
问题描述
对于两个正整数 m、n(2≤m、n≤7),现有 mn 个整数(不小于 0,且小于 100),编
写程序完成这些数据从小到大的 S 型放置任务。
输入格式
第一行输入两个正整数 m、n(2≤m、n≤7)。
第二行输入 mn 个整数(不小于 0,且小于 100)。
输出格式
输出处理后的 S 型数据矩阵,每个数据使用%3d 格式输出,每 n 个换一行,最后一行
不换行。
#include <stdio.h>
int main()
{
int m,n,i,j;
int a[100];
scanf("%d %d",&m,&n);
for(i=0;i<m*n;i++)
scanf("%d",&a[i]);
for(i=0;i<m*n-1;i++)
{
for(j=i+1;j<m*n;j++)
{
if(a[j]<a[i])
{
int t;
t=a[j];
a[j]=a[i];
a[i]