题目:打印十字图
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)
$$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$
为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。
输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。
例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
请仔细观察样例,尤其要注意句点的数量和输出位置。
资源约定:
峰值内存消耗 < 64M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件
提交时,注意选择所期望的编译器类型。
代码二(优化):
第四届蓝桥杯所有组试题与部分答案
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)
$$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$
p1.jpg
为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。
输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。
例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
请仔细观察样例,尤其要注意句点的数量和输出位置。
资源约定:
峰值内存消耗 < 64M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件
提交时,注意选择所期望的编译器类型。
代码一:
#include <iostream>
using namespace std;
#define N 5+30*4+1
int main() {
int n, i, j, k;
int v[N][N] = {0};//1代表'$',0代表'.'
cin >> n;
int size = (5+n*4)/2;//十字图的行列相等,用一个size代表行列即可
//十字图是一个中心对称的图形,可分为四部分
//只要已知一个部分的布局即可翻转得出其他三部分
for(i = 1; i <= size; i++)
if(i%2)//先将奇数行i+2列后的数都标志为1
for(j = i+2; j <= size+1; j++)
v[i][j] = 1;
for(i = 3; i <= size; i++)
for(j = 1; j <= size; j++)
if(i%2)//从i行等于j列的位置延伸去赋值
if(i == j){
v[i][j] = 1;//i行等于j列的位置应为1
v[i][j-1] = 1;//左边也为1
v[i-1][j] = 1;//上边也为1
v[i][j-2] = 1;//左二也为1
for(int k = i; k <= size+1; k++)
v[k][j-2] = 1;//左二至下都为1
}
//正中间的十字图形是固定的,可单独赋值为1
v[size+1][size+1] = v[size][size+1] = v[size+1][size] = v[size+1][size-1] = 1;
//翻转第一部分按要求复制其他三个部分
for(int a = 1, b = size*2+1; a <= size+1; a++, b--) {
int k = 1;
for(j = size*2+1; j >= size+2; j--) {
v[a][j] = v[j][a] = v[b][j] = v[a][k++];
}
}
//输出结果
for(i = 1; i <= size*2+1; i++){
for(j = 1; j <= size*2+1; j++){
if(v[i][j])
cout << '$';
else
cout << '.';
}
cout << endl;
}
return 0;
}
代码二(优化):
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, a[130][130] = {0};//1代表'$',0代表'.'
cin >> n;
int len = (n*4+5)/2; //十字图的行列相等,用len代表行列即可
int i, j, r, k;
//十字图是一个中心对称的图形,可分为四部分
//只要已知一个部分的布局即可翻转得出其他三部分
for(i = 1; i <= len+1; i += 2)
for(j = i+2; j <= len+1; j++)
a[i][j] = 1;
//从3以上与奇数行相等的奇数列才有的规律
for(i = 3; i <= len+1; i += 2) {
//i行等于j列的位置应为1,该位置的左边和上边也为1
a[i][i] = a[i-1][i] = a[i][i-1] = 1;
for(j = i; j <= len+1; j++)
a[j][i-2] = 1;//左二至下都为1
}
//翻转第一部分按要求复制其他三个部分
for(i = 1, r = len*2+1; i <= len+1; i++, r--) {
k = 1;
for(j = len*2+1; j >= len; j--)
a[i][j] = a[j][i] = a[r][j] = a[i][k++];
}
for(i = 1; i <= len*2+1; i++) { //输出结果
for(j = 1; j <= len*2+1; j++) {
if(a[i][j])
cout << '$';
else
cout << '.';
}
cout << endl;
}
return 0;
}
第四届蓝桥杯所有组试题与部分答案