問我為什麼要用全域變數(全域變數很危險),因為main()中可開的陣列大小比起在main()外小很多,
實際題目敘述也有問題,我開到11X11的陣列竟然不夠,所以開到100X100
奇怪的是測試執行一直TLE(很窘),正式送出答案卻給AC,搞不懂這編譯系統
希望我的程式碼對正在讀的你有幫助><
#include <stdio.h>
#define num 100
int s[ num ][ num ] , MM[ num ] ;
int R , C , M ;
void action_1 () //逆時針旋轉
{
int s_cpy[ num ][ num ] , i , j ;
for ( i = 0 ; i < R ; i ++ )
for ( j = 0 ; j < C ; j ++ )
s_cpy[ C - 1 - j ][ i ] = s[ i ][ j ] ;
int temp = R ; R = C ; C = temp ;
for ( i = 0 ; i < R ; i ++ )
for ( j = 0 ; j < C ; j ++ )
s[ i ][ j ] = s_cpy[ i ][ j ] ;
}
void action_2 () //上下翻轉
{
int s_cpy[ num ][ num ] , i , j ;
for ( i = 0 ; i < R ; i ++ ){
for ( j = 0 ; j < C ; j ++ )
s_cpy[ R - 1 - i ][ j ] = s[ i ][ j ] ;
}
for ( i = 0 ; i < R ; i ++ )
for ( j = 0 ; j < C ; j ++ )
s[ i ][ j ] = s_cpy[ i ][ j ] ;
}
int main()
{
int i , j ;
while ( scanf ( "%d %d %d" , &R , &C , &M ) != EOF ){
for ( i = 0 ; i < R ; i ++ )
for ( j = 0 ; j < C ; j ++ )
scanf ( " %d" , &s[ i ][ j ] ) ;
for ( i = 0 ; i < M ; i ++ )
scanf ( " %d" , &MM[ i ] ) ;
for ( i = M - 1 ; i >= 0 ; i -- ){ //指令由後往前執行(推回A)
if ( MM[ i ] == 0 )
action_1 () ;
else
action_2 () ;
}
printf ( "%d %d\n" , R , C ) ;
for ( i = 0 ; i < R ; i ++ ){
for ( j = 0 ; j < C - 1 ; j ++ )
printf ( "%d " , s[ i ][ j ] ) ;
printf ( "%d\n" , s[ i ][ C - 1 ] ) ;
}
}
return 0 ;
}
執行結果 : AC 0ms 108kb
補充一下 #define num 100
這是前置處理器 功能之一
#define 可定義 常數 or 巨集
在程式內 只要出現 num 都會轉成 100
現在系統用 10 x 10 格存陣列可以過了
給看這份解題報告的人提醒
順帶一提,用 string.h 中的 memcpy() 複製陣列會很快
比起用 for 一個一個給值還快許多