生活随笔
收集整理的這篇文章主要介紹了
2018网易互娱笔试1——花砖拼接C++
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <cstring>
#include <algorithm>using namespace std;/*
解題思路:
1、找出需要拼接的整體花磚的個數q=m/n
2、找出剩余拼接的邊長p=m%n,則兩邊需要增加的長度分別為x=p/2,因為花磚邊長只能按照單位1分割,故此處的余量p只能為偶數
3、若p為偶數則直接計算;若p為奇數,則p=p+n(即需要將一塊花磚的邊長加原始余量),同時q=q-1(需要的整體花磚少一個)
4、平分余量,則x+q*n+x=m;
5、構造需要輸出的拼接結果,按行打印出即可
*/
void pingjie()
{int n=0,m=0;cin>>n>>m;vector<string> vn;vector<vector<char> > vm;string str="";for(int i=0; i<n; i++){cin>>str;vn.push_back(str);}///m是n的整數倍,直接輸出///m除以n余數為奇數偶數時的判斷int p,q;p = m%n;q = m/n;if(1 == p%2){p = p+n;q = (m-n)/n;}///兩邊多出的為p/2int x = p/2;int ex = n-x;//cout<<p<<x<<q<<endl;int number=0;///(n-x)——n行的數據for(int i=ex; i<n; i++){number++;vector<char> temp;for(int j=ex; j<n; j++)temp.push_back(vn[i][j]);int y=0;while(y<q){y++;for(int k=0; k<n; k++)temp.push_back(vn[i][k]);}for(int j=0; j<x; j++)temp.push_back(vn[i][j]);vm.push_back(temp);}///中間的q倍的0——n行的數據int y=0;while(y<q){y++;//cout<<"______test________"<<endl;for(int i=0; i<n; i++){number++;vector<char> temp;for(int j=ex; j<n; j++)temp.push_back(vn[i][j]);for(int k=0; k<n; k++)temp.push_back(vn[i][k]);for(int j=0; j<x; j++)temp.push_back(vn[i][j]);vm.push_back(temp);}}///0——x行的數據for(int i=0; i<x; i++){number++;vector<char> temp;for(int j=ex; j<n; j++)temp.push_back(vn[i][j]);int y=0;while(y<q){y++;for(int k=0; k<n; k++)temp.push_back(vn[i][k]);}for(int j=0; j<x; j++)temp.push_back(vn[i][j]);vm.push_back(temp);}//cout<<number<<endl;for(int i=0; i<number; i++){for(int j=0; j<number; j++)cout<<vm[i][j];cout<<endl;}cout<<endl;
}int main()
{int T;cin>>T;while(T--)pingjie();//cout << "Hello world!" << endl;return 0;
}
/**
測試數據:
3
3 5
1x1
xox
1x1
3 7
1x1
xox
1x1
5 7
13s31
lkckl
sc2cs
lkckl
13s31
測試結果:
11x11
11x11
xxoxx
11x11
11x11oxxoxxo
x11x11x
x11x11x
oxxoxxo
x11x11x
x11x11x
oxxoxxo113s311
113s311
llkckll
ssc2css
llkckll
113s311
113s311
*/
總結
以上是生活随笔為你收集整理的2018网易互娱笔试1——花砖拼接C++的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。