本題目為東北師範大學資訊科學與技術學院2023年碩士研究生**技術科目招生試題,由一位高中同學提供,讓我三年沒用c的又重操舊業。
題目內容:編寫程式按下面指定的資料為陣列x的下三角元素賦值,並按如下形式輸出:
3 7
2 6 9
1 5 8 10
方法一:找規律**
俗話說,找到規律最簡單,輕輕鬆鬆乙個通式就解決。
首先觀察每列,從上到下逐次減1,用巨集定義level表示這個陣列有幾行,用i、j分別表示第i行和第j列(這裡i和j從0開始)。則第i行第0列的元素可以表達為level-i。
從第1列開始整列可以看作是第0列都增加某個值,第1列相比第0列增加4(level),第2列相比第0列增加4+3=7(level+level-1=2*level-1),第3列相比第0列增加4+3+2=9(level+level-1+level-2=3*level-3)……
則第j列相比第0列增加的項的第一項為j*level,第二項為0,1,2,3,....j-1之和,由通項公式得,第二項為j(j-1)/2,所以總增加為j*level+j(j-1)/2.
綜上所述,表示式可以寫為num[i][j]=level-i+level*j-j*(j-1)/2;
方法二:迴圈法
那就好整了,假設陣列一共level行,下三角陣列一共有level*(level+1)/2個,那我先初始變數index為0,用來表示每次賦值的賦值數,初始化pi為level-1,初始化pj為0,即表示當前第level-1行第j列。
然後進入while迴圈,迴圈條件為index小於level*(level+1)/2,如果大於則跳出。
在迴圈中,首先把num[pi][pj]賦值為index+1(因為從1開始),然後index自增,進行如下判斷:如果pi==pj,即當前元素在主對角線上,也就意味著到了下三角陣列該列的最頂上,則需要pi重新初始化為level-1,pj自增,否則pi自減。
**:方法一:
方法二:#include #define level 4
int main()
}} printf("\n");
}}
#include #define level 4
int main()
}} printf("\n");
} }
演算法基礎 陣列指定規則排序問題(Golang實現)
給出乙個二維陣列,請將這個二維陣列按第i列 i從1開始 排序,如果第i列相同,則對相同的行按第i 1列的元素排序,如果第i 1列的元素也相同,則繼續比較第i 2列,以此類推,直到最後一列。如果第i列到最後一列都相同,則按原序排列。樣例輸入 1,2,3 2,3,4 2,3,1 1,3,1 按第2列排序...
上三角矩陣下三角矩陣
要求給定矩陣,輸出其上三角矩陣或下三角矩陣 源 如下 include include include include const int m 5 void proc int array m m void main printf n proc a printf result array is n fo...
C 輸出上三角 下三角 菱形 楊輝三角形
第一行1個星,第二行3個星,第三行5個星,第四行7個星,第五行9個星。分析 三角形的形狀由輸出的空白和星組成,通過分析每一行輸出幾個空格,幾個星,就可完成輸出三角形的工作。includeusing namespace std int main for j 1 j 2 i 1 j cout 第一行9個...