历届试题 打印十字图(模拟)
試題 歷屆試題 打印十字圖
資源限制 時(shí)間限制:1.0s 內(nèi)存限制:256.0MB$Daily English:
我想要提醒這個(gè)星球上的人類唯一的一件事就是:我們
依賴地球母親生存。
The only thing I want is to awaken all humans on the planet that we are living on Mother Earth.
問題描述
小明為某機(jī)構(gòu)設(shè)計(jì)了一個(gè)十字型的徽標(biāo)(并非紅十字會(huì)啊),如下所示:
..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$..對方同時(shí)也需要在電腦dos窗口中以字符的形式輸出該標(biāo)志,并能任意控制層數(shù)。
輸入格式
一個(gè)正整數(shù) n (n<30) 表示要求打印圖形的層數(shù)。
輸出格式
對應(yīng)包圍層數(shù)的該標(biāo)志。
樣例輸入1
1樣例輸出1
..$$$$$.. ..$...$.. $$$.$.$$$ $...$...$ $.$$$$$.$ $...$...$ $$$.$.$$$ ..$...$.. ..$$$$$..樣例輸入2
3樣例輸出2
..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$..提示
請仔細(xì)觀察樣例,尤其要注意句點(diǎn)的數(shù)量和輸出位置。
思路:
這題有點(diǎn)意思(我看了好久,一開始想的太復(fù)雜導(dǎo)致一直不知到怎么動(dòng)手!!浪費(fèi)好多時(shí)間!!!好在沒有放棄!!!)。最后還是被我A了!!!哈哈~(悄悄開心一會(huì))
簡單粗暴模擬(其實(shí)還是需要點(diǎn)腦子~):
中間十字先初始化好,然后抓住兩個(gè)起點(diǎn),將每一圈劃分成四個(gè)部分,
每個(gè)部分,繪制每個(gè)部分需要記錄方向和步數(shù)。
具體看代碼~
代碼:
#include <iostream> #include <vector> using namespace std; char mp[150][150]; //dir: up,down,left,right:0,1,2,3 int step_x[] = {-1,1,0,0}; int step_y[] = {0,0,-1,1}; struct Point {int x;int y;Point(int xx,int yy){x = xx;y = yy;} }; vector<Point>vec;//設(shè)置每一部分的方向+步數(shù) void initVec(int *dc_d,int *dc_c) {if(vec.size())vec.clear();for(int i = 0; i < 4; i++){vec.push_back(Point(dc_d[i],dc_c[i]));} } //繪制每一個(gè)部分 void work(int sx,int sy) {for(int i = 0; i < 4; i++){int dir = vec[i].x;int cnt = vec[i].y;int xx = sx + step_x[dir];int yy = sy + step_y[dir];mp[xx][yy] = '$';for(int j = 1; j < cnt; j++){xx += step_x[dir];yy += step_y[dir];mp[xx][yy] = '$';}sx = xx;sy = yy;} } int main() {int n;cin>>n;//圖像大小int m = 5 + 4 * n;//圖像初始化for(int i = 0; i < m; i++){for(int j = 0; j < m; j++){mp[i][j] = '.';}}Point center(2*n+2,2*n+2);//中間十字mp[center.x][center.y] = '$';for(int i = 0; i < 4; i++){int x1 = center.x + step_x[i];int y1 = center.y + step_y[i];mp[x1][y1] = '$';x1 += step_x[i];y1 += step_y[i];mp[x1][y1] = '$';}int y0 = center.y - 2,z0 = center.y + 2;//方向int dc_d0[] = {0,3,0,3};int dc_d1[] = {0,2,0,2};int dc_d2[] = {1,3,1,3};int dc_d3[] = {1,2,1,2};int x = 2 * n + 2;int y = y0,z = z0;//每圈分成4個(gè)部分for(int i = 1; i <= n; i++){//步數(shù)int dc_c[] = {2*i,2,2,2*i};//兩個(gè)起點(diǎn)的列y -= 2;z += 2;mp[x][y] = '$';mp[x][z] = '$';//左上initVec(dc_d0,dc_c);work(x,y);//右上initVec(dc_d1,dc_c);work(x,z);//左下initVec(dc_d2,dc_c);work(x,y);//右下initVec(dc_d3,dc_c);work(x,z);}for(int i = 0; i < m; i++){for(int j = 0; j < m; j++){cout<<mp[i][j];}cout<<endl;}return 0; }總結(jié)
以上是生活随笔為你收集整理的历届试题 打印十字图(模拟)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 历届试题 大臣的旅费(树的直径)
- 下一篇: window10下搭建汇编环境(软件+资