2016年9月13日 星期二

APCS 105年3月題2-矩陣轉換(C++參考)

APCS Y16M3-Q2 -矩陣轉換  問題描述

輸入格式原題單測資,本參考改為多測資,讀至EOF, 每筆測資說明如下:第一行有三個介於 1 與 10 之間的正整數  R, C, M 。 接下來有  R  行(line)是矩陣 B 的內容 ,每一行(line)都包含  C  個正整數 ,其中的第  i  行第  j  個數字代表矩陣  Bij  的值 。 在矩陣內容後的一行有 M 個整數, 表示對矩陣 A  進行的操作 。 第  k  個整數 mk 代表第  k  個操作,如果  mk = 0  則代表旋轉,mk = 1  代表翻轉。同一行的數字之間都是以一個空白間格,且矩陣內容為 0~9 的整數。
輸出格式:兩筆輸出之間空一列每筆輸出包含兩個部分。第一個部分有一行,包含兩個正整數  R'  和  C',以一個空白隔開,分別代表矩陣  A  的列數和行數。接下來有  R'  行,每一行都包含  C'  個正整數,且每一行的整數之間以一個空白隔開,其中第  i  行的第  j  個數字代表矩陣 Aij  的值。每一行的最後一個數字後並無空白
範例輸入:
3 2 3
1 1
3 1
1 2
1 0 0
3 2 2
3 3
2 1
1 2
0 1

範例輸出:
3 2
1 1
1 3
2 1

2 3
2 1 3

1 2 3
參考程式碼:
// apcs-2 矩陣轉換 

#include <iostream>
#include <vector>
using namespace std;
const int MaxN = 10;

int a[2][MaxN][MaxN];
int rc[2]; //列高、行寬

void rev0(int s,int w)  //逆旋轉
{
int r = rc[w], c=rc[1-w];
int i,j;
for(i=0; i<r; ++i)
 for(j=0; j<c; ++j)
   a[1-s][c-1-j][i] = a[s][i][j];
}

void rev1(int s,int w)  //逆翻轉
{
int r = rc[w], c=rc[1-w];
int i,j;
for(i=0; i<r; ++i)
 for(j=0; j<c; ++j)
   a[1-s][r-1-i][j] = a[s][i][j];
}
void print(int s, int w) //印矩陣
{
int r = rc[w], c=rc[1-w];
int i,j;
cout << r <<' '<< c << endl;
for(i=0; i<r; ++i)
{
cout  << a[s][i][0];
for(j=1; j<c; ++j)
  cout  <<' ' << a[s][i][j];
cout << endl;
}
 
}
int main(void)
{
int i,j ,k, r,c , m;
bool first=true;
while(cin >> r >> c >> m )
{
rc[0] = r ; rc[1] = c;
for(i=0; i<r ; ++i)
 for(j=0; j<c; ++j)
   cin >> a[0][i][j];
int s=0 , w=0;
// print(s,w);  // 測試用印出
int d[MaxN];
for(i=0; i<m; ++i) cin >> d[i];
for(i=m-1; i>=0; --i)
{
if(d[i]==0)
{
rev0(s, w);  // 旋轉
w=1-w;
}
else rev1(s,w);   // 翻轉
s=1-s; 
//     print(s,w);  // 測試用印出
}
        if(first) first=false; else cout << endl;
print(s,w);
}
return 0;
}

Related Posts:

  • 商競103M-P31是否為樹(CPP版參考)這是依商業技藝競賽程式103年模擬題第3題子題1稍微修改資料檔第1列 一個數字 n ,代表 n 組資料{0<n<10},接著每組資料一列每列是一個圖形的所有「邊」以空白隔開 ,每一個「邊」是由兩數字以逗號連接判斷這個圖形是否為一棵樹,是印T否印F參考程式碼: /* b517: 是否為樹-… Read More
  • 商競104F-P42最小成本生成樹(CPP參考)這是依商業技藝競賽程式104年正式題第4題子題2稍微修改資料檔第1列 一個數字 n ,代表 n 組資料,接著每組資料一列每一列為一個圖形所有「邊」以空格隔開,「邊」由3個以逗號隔開的數字組成{2個節點及成本}每組資料印出1個數字,算出圖形的最小成本生成樹的成本。 參考程式碼: #include &l… Read More
  • 商競104F-P42最小成本生成樹這是依商業技藝競賽程式104年正式題第4題子題2稍微修改資料檔第1列 一個數字 n ,代表 n 組資料,接著每組資料一列每一列為一個圖形所有「邊」以空格隔開,「邊」由3個以逗號隔開的數字組成{2個節點及成本}每組資料印出1個數字,算出圖形的最小成本生成樹的成本。 輸入… Read More
  • 商競104F-P41二搜+後巡(CPP版參考)這是依商業技藝競賽程式104年正式題第4題子題1稍微修改資料檔第1列 一個數字 n ,代表 n 組資料,接著每組資料二列每組的第1列一個數字x,每組第2列 x 個數字以逗號隔開將讀入的 x 數字建成二元搜尋樹,然後依二元樹的後序拜訪 印出 參考程式碼: /* 104f-p41_bst-pos 將 n… Read More
  • To P2 之 a010質因數分解參考程式碼 ,最後有另一組建質數表的 genp程式 // a010 #include <iostream> #include <cstring> #include <vector> #include <cmath> #define maxn 46340… Read More

0 意見:

張貼留言