日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

历届试题 打印十字图(模拟)

發布時間:2024/9/3 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 历届试题 打印十字图(模拟) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

試題 歷屆試題 打印十字圖

資源限制 時間限制:1.0s 內存限制:256.0MB

$Daily English:

我想要提醒這個星球上的人類唯一的一件事就是:我們
依賴地球母親生存。
The only thing I want is to awaken all humans on the planet that we are living on Mother Earth.

問題描述

小明為某機構設計了一個十字型的徽標(并非紅十字會啊),如下所示:

..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$..

對方同時也需要在電腦dos窗口中以字符的形式輸出該標志,并能任意控制層數。

輸入格式

一個正整數 n (n<30) 表示要求打印圖形的層數。
輸出格式
對應包圍層數的該標志。

樣例輸入1

1

樣例輸出1

..$$$$$.. ..$...$.. $$$.$.$$$ $...$...$ $.$$$$$.$ $...$...$ $$$.$.$$$ ..$...$.. ..$$$$$..

樣例輸入2

3

樣例輸出2

..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$..

提示
請仔細觀察樣例,尤其要注意句點的數量和輸出位置。

思路:

這題有點意思(我看了好久,一開始想的太復雜導致一直不知到怎么動手!!浪費好多時間!!!好在沒有放棄!!!)。最后還是被我A了!!!哈哈~(悄悄開心一會)

簡單粗暴模擬(其實還是需要點腦子~):
中間十字先初始化好,然后抓住兩個起點,將每一圈劃分成四個部分,
每個部分,繪制每個部分需要記錄方向和步數。
具體看代碼~

代碼:

#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;//設置每一部分的方向+步數 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]));} } //繪制每一個部分 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個部分for(int i = 1; i <= n; i++){//步數int dc_c[] = {2*i,2,2,2*i};//兩個起點的列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; }

總結

以上是生活随笔為你收集整理的历届试题 打印十字图(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。