例2.7

输出梯形

(九度教程第14题)

时间限制:1秒

**内存限制:32兆 **

特殊判题:否

题目描述:

输入一个高度h,输出一个高为h,上底边为h的梯形。

输入:

一个整数h(1<=h<=1000)。

输出:

h所对应的梯形。

样例输入:

4

样例输出:

****

******

********

**********

提示:

梯形每行都是右对齐的,sample中是界面显示问题

#include

int main () {

int h;

while (scanf ("%d",&h) != EOF) {

int maxLine = h + (h - 1) * 2; //计算最后一行包含的星号个数

for (int i = 1;i <= h;i ++) { //依次输出每行信息

for (int j = 1;j <= maxLine;j ++) { //依次输出每行当中的空格或星号

if (j < maxLine - h - (i - 1) * 2 + 1)

printf(" ");

//输出空格

else

//输出星号

printf("*");

}

printf("\n"); //输出换行

}

}

return 0;

}

例2.8

叠筐

(九度教程第15题)

时间限制:1秒

**内存限制:32兆 **

特殊判题:否

题目描述:

把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入:

输入是一个个的三元组,分别是,外筐尺寸n(n为满足0

输出:

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。

样例输入:

11 B A

5 @ W

样例输出:

AAAAAAAAA

ABBBBBBBBBA

ABAAAAAAABA

ABABBBBBABA

ABABAAABABA

ABABABABABA

ABABAAABABA

ABABBBBBABA

ABAAAAAAABA

ABBBBBBBBBA

AAAAAAAAA

@@@

@WWW@

@W@W@

@WWW@

@@@

#include

int main () {

int outPutBuf[82][82]; //用于预排版的输出缓存

char a , b; //输入的两个字符

int n; //叠框大小

bool firstCase = true; //是否为第一组数据标志,初始值为true

while (scanf ("%d %c %c",&n,&a,&b) == 3) {

if (firstCase == true) { //若是第一组数据

firstCase = false; //将第一组数据标志标记成false

}

else printf("\n"); //否则输出换行

for (int i = 1,j = 1;i <= n;i += 2,j ++) { //从里至外输出每个圈

int x = n / 2 + 1 , y = x;

x -= j - 1;y -= j - 1; //计算每个圈右上角点的坐标

char c = j % 2 == 1 ? a : b; //计算当前圈需要使用哪个字符

for (int k = 1;k <= i;k ++) { //对当前圈进行赋值

outPutBuf[x + k - 1][y] = c; //左边赋值

outPutBuf[x][y + k - 1] = c; //上边赋值

outPutBuf[x + i - 1][y + k - 1] = c; //右边赋值

outPutBuf[x + k - 1][y + i - 1] = c; //下边赋值

}

}

if (n != 1) { //注意当n为1时不需此步骤

outPutBuf[1][1] = ' ';

outPutBuf[n][1] = ' ';

outPutBuf[1][n] = ' ';

outPutBuf[n][n] = ' '; //将四角置为空格

}

for (int i = 1;i <= n;i ++) {

for (int j = 1;j <= n;j ++) {

printf("%c",outPutBuf[i][j]);

}

printf("\n");

} //输出已经经过排版的在输出缓存中的数据

}

return 0;

}

如该代码所示,我们不再在输出时使用我们得到的规律,而是用另一种更容

易的方法完成排版。我们利用一个缓存数组来表示将要输出的字符阵列,我们对

该字符阵列的坐标作如下规定,规定阵列左上角字符坐标为(1,1),阵列右下

角字符坐标为(n,n),其它坐标可由此推得。程序按照由最内圈至最外圈的的

顺序来完成图形的排列。在完成每圈排列时,我们都需要注意两个要点:首先需

要确定该圈左上角的坐标。我们将以这个坐标为参照点来完成该圈的其它字符位

置的确定(当然也可以选用其它点)。观察图形得知,最中间圈的左上角字符坐

标为(n / 2 + 1,n / 2 + 1),次中间圈的左上角字符坐标为(n / 2 + 1- 1,n / 2 + 1 - 1),,

依次类推即可得到图形中每一个圈的参照点。其次,我们需要计算该圈每边边长

长度。这也较容易得出,中心圈长度为 1,次中心圈长度为 3,依次类推,外圈

总比内圈长度增加 2。注意了这两点以后,我们按照以下顺序完成每圈的排版,

首先明确该圈使用哪一个字符来填充,我们使用判断循环次数指示变量 j 的奇偶

性来判断当前需要使用的字符,即奇数次循环时(j 为奇数)时使用第一个字符,

偶数次循环时使用第二个字符。然后,我们确定该圈左上角字符的坐标,我们使

用中心坐标(n / 2 + 1,n / 2 + 1)减去当前循环次数指示变量 j 来确定该圈左上

角坐标,即(n / 2 + 1- j,n / 2 + 1 - j)。接着,我们计算该圈边长长度,我们利用

初始值为 1 的循环指示变量 i 来表示边长长度,并在每次循环结束后加 2,代表边长由

1 开始,每外移一个圈边长长度即加上 2。利用变量 i 所存的值我们即可

对当前圈的四条边进行赋值,对应的坐标已在代码中给出,这里不再列举。在完

成所有圈的编排后,我们只需按照题目的需要去除四个角的字符,最后将整个输

出缓存中的字符阵列输出即可。

另外,此代码还有两个注意点值得我们指出。

1.输出格式。题面要求我们在输出的每个叠筐间输出一个空行,即除了最后

一个叠筐后没有多余的空行,其它叠筐输出完成后都需要额外的输出一个空行。

为了完成这个要求,我们将要求形式改变为除了在第一个输出的叠筐前不输出一

个空行外,在其它每一个输出的叠筐前都需要输出一个额外的空行。为完成这一

目的,我们在程序开头设立了 firstCase 变量来表示正在处理数据的是否为第一组

数据,毫无疑问它的初始值为 true。在程序读取每组数据后,我们都测试 firstCase

的值,若其为 true 则表示当前处理的数据为第一组数据,我们不输出空行,并在

此时将 firstCase 变量改变为 false。以后,每当程序读入数据,测试 firstCase 变

量时,该变量均为 false,于是我们完成题目的要求,在输出的叠筐前额外的输

出一个空行,来达到题面对于输出格式的要求。

2.边界数据处理。按上文所说,我们在输出缓存中完成字符阵列排版后,需

要将该阵列四个角的字符修改为空格,但是这一修改不是一定需要的。当输入的

n 为 1 时,该修改会变得多余,它会使输出仅变为一个空格,这与题面要求不符。

因此,在进行该修改之前,我们需要对 n 的数值作出判断,若其不为 1 则进行修

改,否则跳过修改部分。由此不难看出,机试考题要求我们在作答时,不仅能够

大致的把握算法,同时还要细致的考虑边界数据会给我们的程序造成什么样的影

响。只有充分考虑了所有情况,并保证在所有题面明确将会出现的条件下,程序

依旧能够正常工作,这样我们才能使自己的程序真正的万无一失、滴水不漏。

本例介绍了另一种解决排版题的思路,当输出图形所具有的规律不能或者很难直

接应用到输出上时,我们就要考虑采用该例所采用的方法,先用一个二维数组来

保存将要输出的字符阵列,并在该数组上首先完成排版。因为没有了输出时从上

至下、从左至右的顺序限制,我们能更加随意的按照自己的需要或者图形的规律

来依次输出图形,从而完成题目要求。

题目1161

Repeater

(九度教程第16题)

时间限制:1秒

**内存限制:32兆 **

特殊判题:否

#include

#include

#include

int n,q;

char a[10][10],s[3005][3005];

void input()

{

int i,j;

getchar();

for(i=0;i

{

for(j=0;j

scanf("%c",&a[i][j]);

getchar();

}

scanf("%d",&q);

}

void print(int x,int y,int p)

{

int i,j;

int h,k;

if(p==1)

{

for(i=0;i

for(j=0;j

s[x+i][y+j]=a[i][j];

}

else

{

for(i=0;i

{

for(j=0;j

{

if(a[i][j]!=' ')

{

print(x+i*pow(n*1.0,(p-1)*1.0),y+j*pow(n*1.0,(p-1)*1.0),p-1);

}

else

{

for(h=x+i*pow(n*1.0,(p-1)*1.0);h

for(k=y+j*pow(n*1.0,(p-1)*1.0);k

s[h][k]=' ';

}

}

}

}

}

int main()

{

int i,j;

while(scanf("%d",&n)!=EOF&&n)

{

input();

print(0,0,q);

for(i=0;i

{

for(j=0;j

printf("%c",s[i][j]);

printf("\n");

}

}

return 0;

}

王道出版的机试指南_王道论坛计算机考研机试指南 四 排版题相关推荐

  1. 王道出版的机试指南_《王道论坛计算机考研机试指南》试读版.pdf

    <王道论坛计算机考研机试指南>试读版 王道论坛 王道论坛计算机考研机试指南 王道论坛 2013.01.06 写在前面的话 各位王道的小崽子们,今天你们考完初试了,感觉解放了吧?轻松了吧?无 ...

  2. 王道论坛计算机考研机试指南怎么样,王道论坛计算机考研机试指南 二 日期类问题...

    二日期类问题 例2.3 日期差值 (九度教程第6题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数 ...

  3. 王道计算机考研j机试指南,王道论坛计算机考研机试指南 三 Hash的应用

    例2.5 统计同成绩学生人数 (九度教程第10题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若 ...

  4. 王道出版的机试指南_【读书笔记】《王道论坛计算机考研机试指南》 第四、五章...

    第四章 数学问题 一.%运算符 1. a%b中a.b必须为整型变量,不能为浮点数:b变量必须为非0值,否则程序异常终止: 2. 若a为正数,则表达式结果为非负数:若a为负数,则表达式结果为非正数:与b ...

  5. 【读书笔记】《王道论坛计算机考研机试指南》第五章

    目录 第五章 并查集 最小生成树(MST) 最短路径 拓扑排序 第五章 并查集 本节讨论在图论问题中常常要使用到的一种数据结构一一集合,及其相关操作一一并查集. 我们先来看如下的数字集合: 集合A{1 ...

  6. 《王道论坛计算机考研机试指南》第二章【经典入门】

    排序 日期类问题 Hash应用 排序 #include <iostream> #include <algorithm> using namespace std; bool cm ...

  7. 【读书笔记】《王道论坛计算机考研机试指南》第七章

    写目录 第七章 动态规划 递推求解 最长递增子序列(LIS) 最长公共子序列(LCS) 状态与状态转移方程 动态规划问题分析举例 背包问题 第七章 动态规划 递推求解 我们来看一个知名的数列一斐波那契 ...

  8. 机试记不住头文件_计算机考研机试攻略

    目录 写在前面的话 2 关于N诺 4 如何使用本书? 5 第一章 从零开始 8 1.1机试分析 8 1.2 IDE的选择与评测结果 10 1.3 DreamJudge的使用 11 1.4输入输出技巧 ...

  9. 计算机考研 机试书籍及相关的资料

    1.算法笔记(2016.07) 2.算法笔记上机训练实战指南(2016.07) 3.计算机考研--机试指南(第2版)-2019.11 <计算机考研-机试指南>- 1经典入门 https:/ ...

最新文章

  1. Java虚拟机垃圾收集算法
  2. 服务器和芯片有什么区别,物联网模块和芯片的区别
  3. Wordpress: contact form 7 表单内容同行
  4. CF1030F Putting Boxes Together
  5. mysql5.6兼容包_freebsd9.1源码安装apache、mysql、php环境(亲侧通过)
  6. 畅通工程,How Many Tables ACM第九天-图论
  7. vue 初始化方法_前端发展方向指南—Vue源码初始化
  8. TQ210——核心板和底板
  9. 关于浏览器前进键和后退键样样式表冲突的问题
  10. 实用c语言程序设计教材,实用C语言程序设计
  11. 基于python的多光谱影像植被指数计算
  12. 记录一次VMWare15 卸载重装问题
  13. 华为FPGA设计高级技巧xilinx篇阅读笔记一
  14. 端口渗透——21端口FTP
  15. pdf翻译,两款pdf文件翻译软件,支持linux/ubuntu,window,mac下使用
  16. Prompt-Learning for Fine-Grained Entity Typing
  17. POJ-3411 Paid Roads 搜索优化
  18. Linux全局替换文件内容
  19. golang空map
  20. 2017年8月22日 星期二

热门文章

  1. 58同城再曝上市传闻:筹资至少1亿美元
  2. js往select下追加html,js给select下拉框赋值
  3. Einstein's Riddle 爱因斯坦出的智力题?
  4. 淘宝直通车选词怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  5. php台阶走两步余一步,【原创BG】嗨,那条龙 CP:阿莱克丝X大王
  6. 《天地图电子地图符号与注记说明2015》线宽及字体单位转换
  7. CC2540开发入门
  8. 计算机收藏夹里面桌面不见了怎么办,win10系统电脑收藏夹不见了怎么办
  9. matlab interp1d 中的spline方法对应python
  10. 自学UI设计看什么书好?