題意:給你一個n*n的矩陣,n為奇數,以最中心的一個數為基准,可以把這個矩陣 看成一圈一圈的,每一圈都可以逆時針或者順時針旋轉,每一次旋轉每個元素只能移動一個單元格,求經過每一圈的旋轉矩陣兩個對角線和最大的值,並求出最少旋轉次數
一圈一圈的處理,注意最中心的那個數不用管,就它一個,那麼這個矩陣只有n/2圈需要操作,對於每一圈的元素都放在一個一維數組裡面,然後枚舉這個數組裡的每一個元素為開頭,統計接下來的三個數,求和比較大小即可,因為有逆時針的,所以順時針時從開頭開始枚舉,逆時針則從尾部開始枚舉,這題數據貌似有些爛,
int n;
int mp[15][15];
void init() {
memset(mp,0,sizeof(mp));
}
bool input() {
while(cin>>n,n) {
for(int i=0;i>mp[i][j];
return false;
}
return true;
}
void cal() {
int ans = 0;
int cnt = 0;
int nnum = n/2;
int aa[100 + 55];
for(int k=0;kk;j--)aa[pos++] = mp[n - k - 1][j];
for(int i=n - k - 1;i>k;i--)aa[pos++] = mp[i][k];
for(int i=0;i<=(pos + 1)/2;i++) {
int tmp = 0;
tmp = aa[i%pos] + aa[(i+(n-2*k-1))%pos] + aa[(i+2*(n-2*k-1))%pos] + aa[(i+3*(n-2*k-1))%pos];
if(tmp > sum) {
sum = tmp;
now = i;
}
if(tmp == sum) {
if(i < now)
now = i;
}
}
for(int i=pos-1,mark = 0;mark <=(pos+1)/2;i--) {
int tmp = 0;
tmp = aa[i%pos] + aa[(i+(n-2*k-1))%pos] + aa[(i+2*(n-2*k-1))%pos] + aa[(i+3*(n-2*k-1))%pos];
if(tmp > sum) {
sum = tmp;
now = pos - i;
}
if(tmp == sum) {
if(pos - i < now)
now = pos - i;
}
mark++;
}
ans += sum;
cnt += now;
}
ans += mp[n/2][n/2];
cout<