題目內容:
判斷一個 N 階整型矩陣是否為對稱矩陣。要求矩陣用一維陣列存盤。
輸入格式:
N+1 行,第 1 行:數字 N(10>n>0);第 2-(N+1) 行:N 階方陣的元素
輸出格式:
“Yes” 或 “No”
輸入樣例:
4
5 6 7 9
2 8 5 4
3 7 16 15
1 4 8 11
輸出樣例:
No
#include<iostream>
using namespace std;
bool f(int a[],int n){
int i, j;
int flag = 1; //用作標記對角線元素的下一個
int count;//用于比較
for( i=0; i<n*n-n; i=i+n){//n-1次回圈,最后一行不需要比較
count = 1;
for( j=i+flag; j<i+n; j++){//每行只比較對角線右側的元素
if(a[j]!=a[j+count*(n-1)]) return false;//只要發現一個不相等就不再繼續
count ++;
}
flag ++;
}
return true;
}
int main(){
int a[100];
int n;
cin>>n;
for(int i=0; i<n*n; cin>>a[i++]);//按行輸入矩陣
// for(int i=0; i<n*n; cout<<a[i++]<<" ");
if(f(a,n)) cout<<"Yes";
else cout<<"No";
return 0;
}
演算法分析:
題目要求使用一維陣列存盤,關鍵在于找到比較元素的位置,做到不重復比較,以4階矩陣 a[16] 為例,從a[0]到a[15]一共16個元素,由相似矩陣的性質可知對角線元素a[0]、a[5]、a[10]、a[15]不需要比較,矩陣第n行最后一行也不需要比較,這里選擇對角線右側對[左側進行比較即a[1]和a[4]比較a[2]和a[8]......從中遞推出在每一行中對角線右側的第1個元素a[j]應與a[j+n-1],第二個元素a[j+1]與a[j+1+2*(n-1)]比較,以此類推。
uj5u.com熱心網友回復:
你想問什么呢轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104429.html
標籤:C++ 語言
上一篇:網路引數測驗程式
