一. 二維數(shù)組與矩陣打印
二. 回型矩陣
1.題目
2.思路分析
3.代碼實(shí)現(xiàn)
三. 蛇形矩陣
1.題目
2.思路分析
3.代碼實(shí)現(xiàn)
四. 上三角矩陣
1.題目
2.思路分析
3.代碼實(shí)現(xiàn)
五. 矩陣轉(zhuǎn)置
1.題目
2.思路分析
3.代碼實(shí)現(xiàn)
六. 總結(jié)
一. 二維數(shù)組與矩陣打?。?/h2>
二維數(shù)組,作為一種存放一系列數(shù)的載體,不免和數(shù)學(xué)中用于存放數(shù)的數(shù)表——矩陣,有著密切的聯(lián)系。矩陣本身就有些抽象,需要設(shè)計(jì)一個(gè)程序精準(zhǔn)打印出來(lái)更是有難度,所以今天便來(lái)總結(jié)一些二維數(shù)組與矩陣打印的問(wèn)題該如何解決。
(題目取自??途W(wǎng)BC133-BC138)
二. 回型矩陣
1.題目:
BC133 回型矩陣
描述
給你一個(gè)整數(shù)n,按要求輸出n?n的回型矩陣
輸入描述:
輸入一行,包含一個(gè)整數(shù)n
1<=n<=19
輸出描述:
輸出n行,每行包含n個(gè)正整數(shù).
示例1
輸入:4
輸出:1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
2.思路分析:

分為內(nèi)循環(huán)與外循環(huán):外循環(huán)每循環(huán)一次就是打印一圈,逐次朝里,邊界不斷縮??;內(nèi)循環(huán)分為4個(gè),每個(gè)循環(huán)就是圖中劃分的(同色為一組)先從左向右、再?gòu)纳舷蛳隆⒃購(gòu)挠蚁蜃?、再?gòu)南孪蛏洗蛴。?/p>
外循環(huán)的注意點(diǎn)1——循環(huán)終止條件:start<over(找規(guī)律得出的,這種通常都是找規(guī)律得出的,最好奇數(shù)偶數(shù)的情況都試一下,再下結(jié)論);
外循環(huán)的注意點(diǎn)2——循環(huán)變量的改變:每循環(huán)一次:start++,over--(也是找規(guī)律得到的);
內(nèi)循環(huán)的注意點(diǎn):開始和結(jié)束,用start和over表示,要仔細(xì)考慮;
奇數(shù)的最后一個(gè)數(shù),是start=over的情況,不被包含在循環(huán)里,所以要補(bǔ)在最后。
3.代碼實(shí)現(xiàn):
#include <stdio.h>
int main()
{
int n, i, j, step = 1,arr[20][20] = { 0 };
scanf("%d", &n);
int start = 0, over = n - 1;//對(duì)第一次循環(huán)的起始和終止條件,進(jìn)行初始化;
//主體部分:原因詳見(jiàn)上方的分析;
while (start < over)//外循環(huán):每循環(huán)一次就打印一圈,逐次朝里,邊界不斷縮??;
{
//內(nèi)循環(huán)分為4個(gè),先從左向右、再?gòu)纳舷蛳?、再?gòu)挠蚁蜃?、再?gòu)南孪蛏洗蛴。? for (j = start; j <= over; j++)
{
arr[start][j] = step;
step++;
}
for (i = start + 1; i <= over; i++)
{
arr[i][over] = step;
step++;
}
for (j = over - 1; j >= start; j--)
{
arr[over][j] = step;
step++;
}
for (i = over - 1; i > start; i--)
{
arr[i][start] = step;
step++;
}
start++;
over--;
}
//奇數(shù)補(bǔ)的那種start=over的情況:
if (n % 2)
{
arr[over][over] = n * n;
}
//把排好的矩陣打印出來(lái):
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
三. 蛇形矩陣
1.題目:
BC134 蛇形矩陣
描述
給你一個(gè)整數(shù)n,輸出n?n的蛇形矩陣。
輸入描述:
輸入一行,包含一個(gè)整數(shù)n
輸出描述:
輸出n行,每行包含n個(gè)正整數(shù),通過(guò)空格分隔。
1<=n<=1000
示例1
輸入:4
輸出:1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
2.思路分析:

首先,這個(gè)矩陣的排列,剛開始會(huì)覺(jué)得有些抽象,有點(diǎn)難以下手,所以需要從一些簡(jiǎn)單的例子中尋找總結(jié)出規(guī)律,所以畫圖找下標(biāo)關(guān)系很重要?。。?/p>
規(guī)律1:連續(xù)的幾個(gè)行列坐標(biāo)和相同,且這個(gè)和不斷增長(zhǎng);
規(guī)律2:和為奇數(shù)的都是行下標(biāo)從0到和的值,而和為偶數(shù)的都是行下標(biāo)從和的值到0;
規(guī)律3:下標(biāo)和大于等于n時(shí),下標(biāo)標(biāo)不再是從0開始,但可以確定的是行/列的上限是n-1,另一個(gè)通過(guò)和減來(lái)得出;
終止條件:arr[n-1][n-1];
3.代碼實(shí)現(xiàn):
#include <stdio.h>
int main()
{
int n, i, j, step = 2, sum = 1, arr[1000][1000] = { 0 };
scanf("%d", &n);
arr[0][0] = 1;
while (sum < n)
{
if (sum % 2)
{
for (i = 0; i <= sum; i++)
{
arr[i][sum-i] = step;
step++;
}
}
else
{
for (i = sum; i >= 0; i--)
{
arr[i][sum-i] = step;
step++;
}
}
sum++;
}
while (sum <= 2 * (n - 1))
{
if (sum % 2)
{
for (i = sum-n+1; i <= n-1; i++)
{
arr[i][sum-i] = step;
step++;
}
}
else
{
for (i = n - 1; i >= sum - n + 1; i--)
{
arr[i][sum-i] = step;
step++;
}
}
sum++;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
四. 上三角矩陣
1.題目:
BC136 KiKi判斷上三角矩陣
描述
KiKi想知道一個(gè)n階方矩是否為上三角矩陣,請(qǐng)幫他編程判定。上三角矩陣即主對(duì)角線以下的元素都為0的矩陣,主對(duì)角線為從矩陣的左上角至右下角的連線。
輸入描述:
第一行包含一個(gè)整數(shù)n,表示一個(gè)方陣包含n行n列,用空格分隔。 (2≤n≤10)
從2到n+1行,每行輸入n個(gè)整數(shù)(范圍-231~231-1),用空格分隔,共輸入n*n個(gè)數(shù)。
輸出描述:
一行,如果輸入方陣是上三角矩陣輸出"YES"并換行,否則輸出"NO"并換行。
示例1
輸入:3
1 2 3
0 4 5
0 0 6
輸出:YES
示例2
輸入:4
1 2 3 4
5 6 7 8
9 0 11 12
13 0 0 16
輸出:NO
2.思路分析:

這題規(guī)律比較容易看出來(lái),主要思路是遍歷下三角區(qū)域(即該為零的區(qū)域),這個(gè)區(qū)域就是j<i的情況。
3.代碼實(shí)現(xiàn):
#include <stdio.h>
int main()
{
int n,i,j,flag=1,arr[10][10]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
if(arr[i][j]!=0)
{
flag=0;
break;
}
}
}
if(1==flag)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
五. 矩陣轉(zhuǎn)置
1.題目:
BC138 矩陣轉(zhuǎn)置
描述
KiKi有一個(gè)矩陣,他想知道轉(zhuǎn)置后的矩陣(將矩陣的行列互換得到的新矩陣稱為轉(zhuǎn)置矩陣),請(qǐng)編程幫他解答。
輸入描述:
第一行包含兩個(gè)整數(shù)n和m,表示一個(gè)矩陣包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
從2到n+1行,每行輸入m個(gè)整數(shù)(范圍-231~231-1),用空格分隔,共輸入n*m個(gè)數(shù),表示第一個(gè)矩陣中的元素。
輸出描述:
輸出m行n列,為矩陣轉(zhuǎn)置后的結(jié)果。每個(gè)數(shù)后面有一個(gè)空格。
示例1
輸入:2 3
1 2 3
4 5 6
輸出:1 4
2 5
3 6
2.思路分析:

這題也比較簡(jiǎn)單,規(guī)律就是i,j互換。
3.代碼實(shí)現(xiàn):
#include <stdio.h>
int main()
{
int n,m,i,j,matrix_T[10][10]={0};
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&matrix_T[j][i]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",matrix_T[i][j]);
}
printf("\n");
}
return 0;
}
六. 總結(jié):
用二維數(shù)組打印矩陣的問(wèn)題
①難點(diǎn):抽象,難以入手;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-775798.html
②解決方法:畫簡(jiǎn)單情形的圖(具象化),分奇數(shù)偶數(shù)兩種情形,從中尋找下標(biāo)間的規(guī)律,再利用循環(huán)來(lái)構(gòu)建程序進(jìn)行打??;所以從簡(jiǎn)單情形中,尋找總結(jié)規(guī)律是特別重要的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-775798.html
到了這里,關(guān)于回型矩陣|蛇形矩陣|上三角矩陣|矩陣轉(zhuǎn)置|二維數(shù)組打印問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!