#41618: 有人可以救救我,幫我看看為什麼錯嗎


lei948787@gmail.com (chen Lai)

學校 : 歡迎光臨羅東高級中學
編號 : 274305
來源 : [61.58.98.185]
最後登入時間 :
2024-09-21 23:08:35
b965. 2. 矩陣轉換 -- 2016年3月apcs | From: [61.58.98.185] | 發表日期 : 2024-08-11 00:12

#include <iostream>
#include <vector>
using namespace std;

void makearray(vector<vector<int>> &array2,vector<int> &tempa,int c);
void swap(int &a,int &b);
void rotate(vector<vector<int>> &array,vector<vector<int>> &array2);
void reverse(vector<vector<int>> &array);
void output(vector<vector<int>> array);

int main(void) {
    int r,c,m,temp;
    cin>>r>>c>>m;
    int motion[m];
    vector<int> tempa;
    vector<vector<int>> array;
    vector<vector<int>> array2;
    vector<vector<int>> array3;
    //input array
    for (int i=0; i<r; i++) {
        for (int i2=0; i2<c; i2++) {
            cin>>temp;
            tempa.push_back(temp);
        }
        array.push_back(tempa);
        tempa.clear();
    }
    //make another array
    if (r>c) {
        makearray(array2,tempa,r);
    } else {
        makearray(array2,tempa,c);
    }    
    array3 = array2;
    //input motion command
    for (int i=0; i<m; i++) {
        cin>>motion[i];
    }
    //main
    for (int i=m; i>0; i--) {
        if (motion[i-1]==0) {
            array2 = array3;
            rotate(array,array2);
        } else {
            reverse(array);
        }
    }
    //確認長寬
    int a = array[0].size();
    int b = array.size();
    for (int i=0; i<array[0].size(); i++) {
        if (array[0][i]==10) {
            a = a-1;
        }
    }
    for (int i=0; i<array.size(); i++) {
        if (array[i][0]==10) {
            b = b-1;
        }
    }
    cout<<b<<" "<<a<<endl;
    output(array);
    return 0;
}
//function
void makearray(vector<vector<int>> &array2,vector<int> &tempa,int c) {
    for (int i=0; i<c+1; i++) {
        for (int i2=0; i2<c+1; i2++) {
            tempa.push_back(10);
        }
        array2.push_back(tempa);
        tempa.clear();
    } 
}
void swap(int &a,int &b) {
    int temp;
    temp = b;
    b = a;
    a = temp;
}
void rotate(vector<vector<int>> &array,vector<vector<int>> &array2) {
        int temp = array[0].size()-1;
        for (int i=0; i<array[0].size(); i++) {
            for (int i2=0; i2<array.size(); i2++) {
                swap(array[i2][temp],array2[i][i2]);
            }
            temp=temp-1;
        }
        swap(array,array2);
}
void reverse(vector<vector<int>> &array) {
    int h = array.size();
    if (h%2==0) {
        h = h-1;
        for (int i=0; i<array.size()/2; i++) {
            for (int i2=0; i2<array[0].size(); i2++) {
                swap(array[i][i2],array[h][i2]);    
            }
            h = h-1;
        }
    } else {
        h = array.size()-1;
        for (int i=0; i<(array.size()+1)/2; i++) {
            for (int i2=0; i2<array[0].size(); i2++) {
                swap(array[i][i2],array[h][i2]);    
            }
            h = h-1;
        }
    }
}

void output(vector<vector<int>> array) {
    for (int i=0; i<array.size(); i++) {
        for (int i2=1; i2<=array[0].size(); i2++) {
            if (array[i][i2-1]!=10) {
                cout<<array[i][i2-1];      
            }
            if (i2 == array[0].size() || array[i][i2] == 10) {
                break;
            }
            cout<<" ";
        }
        cout<<""<<endl;
    }
}

 
#41625: Re: 有人可以救救我,幫我看看為什麼錯嗎


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
b965. 2. 矩陣轉換 -- 2016年3月apcs | From: [27.52.10.150] | 發表日期 : 2024-08-11 11:50

旋轉兩次就出問題了,可能是rotate()裡面size()的關係

 
ZeroJudge Forum