返回列表 發帖

[作業] APCS 實作題 10503 - 2 矩陣轉換

b965: 第 2 題 矩陣轉換

APCS 實作題 10503 - 2

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;


  4. public class P2 {
  5.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  6.         String str,raw[];//宣告一個字串以及字串陣列
  7.         int r,c,m;//列、欄、操作
  8.         int d1[][],d2[][];//準備陣列d1跟d2可使旋轉用
  9.         int o[];//存操作指令      
  10.         P2() throws IOException
  11.         {
  12.                 //System.out.println("aa");
  13.                 while((str=br.readLine())!=null)//一次輸入列、欄、操作 以空白分割
  14.                 {
  15.                         raw=str.split(" ");//將列、欄、操作以空白分割存到raw[0]raw[1]raw[2]內
  16.                         r=Integer.parseInt(raw[0]);
  17.                         c=Integer.parseInt(raw[1]);
  18.                         m=Integer.parseInt(raw[2]);
  19.                         d1=new int[r][c];//宣告陣列大小
  20.                         d2=new int[r][c];//宣告陣列大小
  21.                         o=new int[m];//宣告操作的陣列大小
  22.                         for(int i=0;i<r;i++)//3列
  23.                         {
  24.                                 raw=br.readLine().split(" ");//輸入完一列的值後存到raw內
  25.                                 for(int j=0;j<c;j++)//2欄
  26.                                 {
  27.                                         d1[i][j]=Integer.parseInt(raw[j]);//將raw每一編號的內值存到d1
  28.                                 }
  29.                         }
  30.                         raw=br.readLine().split(" ");
  31.                         for(int i=0;i<m;i++)
  32.                                 o[i]=Integer.parseInt(raw[i]);
  33.                         for(int i=o.length-1;i>=0;i--)
  34.                         {
  35.                                 if(o[i]==1)//若為翻轉
  36.                                 {
  37.                                         for(int j=0;j<r;j++)
  38.                                         {
  39.                                                 for(int k=0;k<c;k++)
  40.                                                 {
  41.                                                         d2[j][k]=d1[r-1-j][k];
  42.                                                 }
  43.                                         }
  44.                                         for(int j=0;j<r;j++)
  45.                                         {
  46.                                                 for(int k=0;k<c;k++)
  47.                                                 {
  48.                                                         d1[j][k]=d2[j][k];//copy一份給d1
  49.                                                         //System.out.print(d1[j][k]+" ");
  50.                                                 }
  51.                                                 //System.out.println();
  52.                                         }
  53.                                 }
  54.                                 else//若為旋轉
  55.                                 {
  56.                                         //r-->列=3 c->欄=2
  57.                                         d2=new int[c][r];//列跟欄改變,重新設定d2陣列長度,方便做旋轉
  58.                                         //d2[2][3]
  59.                                         for(int j=0;j<c;j++)// j=0 1
  60.                                         {
  61.                                                 for(int k=0;k<r;k++)//k=0 1 2
  62.                                                 {
  63.                                                         d2[j][k]=d1[k][c-1-j];
  64.                                                 }
  65.                                         }      
  66.                                         d1=new int[c][r];//d1陣列需要重新變成2列3欄
  67.                                         for(int j=0;j<c;j++)
  68.                                         {
  69.                                                 for(int k=0;k<r;k++)
  70.                                                 {
  71.                                                         d1[j][k]=d2[j][k];
  72.                                                         //System.out.print(d1[j][k]+" ");
  73.                                                 }
  74.                                                 //System.out.println();
  75.                                         }
  76.                                         //以下的列跟欄要做交換方便下次在旋轉
  77.                                         //c=2 r=3
  78.                                         int tmp=r;
  79.                                         r=c;
  80.                                         c=tmp;                       
  81.                                 }
  82.                                 //System.out.println();

  83.                         }
  84.                         System.out.println(r+" "+c);//先印a的列跟欄
  85.                         for(int j=0;j<r;j++)
  86.                         {
  87.                                 for(int k=0;k<c;k++)//k=0 1   c=2
  88.                                 {
  89.                                         if(k<c-1)//印第一欄的時候要加上空白
  90.                                                 System.out.print(d1[j][k]+" ");
  91.                                         else
  92.                                                 System.out.print(d1[j][k]);
  93.                                 }
  94.                                 System.out.println();
  95.                         }

  96.                 }
  97.         }
  98.         public static void main(String[] args) throws IOException {
  99.                 // TODO 自動產生的方法 Stub
  100.                 new P2();
  101.         }

  102. }

  103. /*
  104. 1 1 2    1 1
  105. 1 3 1    3 1
  106.          1 2
  107.          
  108.          
  109. d2       d1
  110. i  j     i  j
  111. 0  0 <-- 0  1   
  112. 0  1 <-- 1  1
  113. 0  2 <-- 2  1
  114. 1  0 <-- 0  0
  115. 1  1 <-- 1  0
  116. 1  2 <-- 2  0



  117. */
複製代碼
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見
Vincent

TOP

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見

TOP

此帖僅作者可見
Vincent

TOP

此帖僅作者可見

TOP

返回列表