洛谷P1000超级马里奥的神奇解法

  话说上过洛谷的都知道,有一道经典例题P1000超级马里奥,这一题,可以说是非常简单非常经典,但是就算如此,还是可以人才辈出,我是个比较循规蹈矩的人(雾),所以我的代码就比较平常,也就是直接输出了所要求的超级马里奥的图片,那道题题目是这样的

超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。

                ********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
一般人都会写个cout+endl来实现输出的操作,但是,网友的力量是强大的,只有想不到没有做不到的,
接下来我介绍几种 ,注意,非原创 比如这位大佬,看之前先来一波膜拜orz,orz;
#include <bits/stdc++.h>
using namespace std;
int mp[][];
int last[];
int n = , m = ;
// 在[x1-x2, y1-y2]绘制ch
void draw(int x1, int y1, int x2, int y2, char ch = '#'){
for(int i = x1; i <= x2; i++)
for(int j = y1; j <= y2; j++)
mp[i][j] = ch;
}
// 在[x1, y1]绘制ch
void draw(int x1, int y1, char ch = '#'){
draw(x1, y1, x1, y1, ch);
}
// 以[x, y]为左上角绘制泥土
void drawland(int x, int y){
draw(x, y, x+, y+);
for(int i = x+; i < x+; i+=)
draw(i, y+, i, y+, '.');
draw(x+, y+); draw(x+, y+);
draw(x+, y+); draw(x+, y+);
draw(x+, y+); draw(x+, y+);
draw(x+, y+); draw(x+, y+);
}
// 以[x, y]为左上角绘制小岛
void drawisland(int x, int y){
draw(x, y, x+, y+);
draw(x+, y+, x+, y+, '-');
draw(x+, y+, x+, y+);
draw(x+, y+, x+, y+, '-');
}
// 以[x, y]为左上角绘制金币
void drawcoin(int x, int y){
draw(x, y, x+, y+);
draw(x+, y+, x+, y+, '.');
draw(x+, y+, x+, y+);
draw(x, y, ' '); draw(x+, y, ' ');
draw(x, y+, ' '); draw(x+, y+, ' ');
}
// 以[x, y]为左上角绘制马里奥
void drawman(int x, int y){
draw(x, y+, x, y+, '*'); x++;
draw(x, y+, x, y+, '*'); x++;
draw(x, y+, x, y+); draw(x, y+, x, y+, '.'); draw(x, y+); x++;
draw(x, y+, x, y+); draw(x, y+, x, y+, '.');
draw(x, y+, x, y+, '.'); draw(x, y+, x, y+, '.'); x++;
draw(x, y+, x, y+); draw(x, y+, x, y+, '.'); x++;
draw(x, y+, x, y+, '.'); x++;
draw(x, y+, x, y+); draw(x, y+, '*'); x++;
draw(x, y+, x, y+); draw(x, y+, x, y+, '*'); x++;
draw(x, y, x+, y+, '.'); draw(x, y+, x+, y+, '*');
draw(x, y+); draw(x, y+, x+, y+); draw(x+, y+, '.');
draw(x+, y+, x+, y+, ' '); draw(x, y+, '.'); draw(x, y+, '.');
draw(x+, y, x+, y+); draw(x+, y+, x+, y+, ' ');
draw(x+, y, x+, y+, ' '); draw(x+, y+, x+, y+, ' ');
}
// 打印输出
void printscreen(){
for(int i = ; i <= n; i++){
last[i] = m;
while(mp[i][last[i]] == ' ')
last[i]--;
}
for(int i = ; i <= n; i++,puts(""))
for(int j = ; j <= last[i]; j++)
putchar(mp[i][j]);
}
int main(){
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
mp[i][j] = ' ';
// 绘制人
drawman(, );
// 绘制他脚下的三块泥土
drawland(, ); drawland(, ); drawland(, );
// 绘制金币下面的那个岛屿
drawisland(, );
// 绘制两个金币
drawcoin(, ); drawcoin(, );
// 输出
printscreen();
return ;
}

大致也看完了吧,这个人,不,这位大佬以坐标的方式,一个一个的把字符输出,最后达到了一样的效果,不得不说,这也太强了吧,你也去试试吧(雾)

如果只有这么点我也不会说是人才辈出了,下面这位可以说是暴力出奇迹了(雾)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<climits>
#include<cfloat>
#include<queue>
#include<cstddef> using namespace std;
char x;
int a[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int main()
{
for(int i = ;i <= ;i++)
{
cout<<(char)a[i];
}
return ;
}

打表。。。

这也未尝不是一种不错的方法,能存下所有的坐标,也是厉害所在啊%%%!这些还不够达到人才辈出,没错,还有优秀的代码优秀的人!

接下来是优秀的人,但看他的代码没什么出众的地方,但是他的题解可以说是很有文化了,我截取他的代码的其中一段的题解

吾有一術。名之曰「画点」。欲行是術。必先得三數。曰「甲」。曰「乙」。曰「字」。乃行是術曰。 施「画」於「甲」。於「乙」。於「甲」。於「乙」。於「字」。 是謂「画点」之術也。 吾有一術。名之曰「画地」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。 加「甲」以八。名之曰「丙」。加「乙」以十三。名之曰「丁」。 施「画」於「甲」。於「乙」。於「丙」。於「丁」。於「井」。 吾有一列。名之曰「戊」。充「戊」以一。以三。以五。以七。 凡「戊」中之「己」。 加「己」以「甲」。名之曰「庚」。加「乙」以一。名之曰「丙」。加「乙」以十二。名之曰「丁」。 施「画」於「庚」。於「丙」。於「庚」。於「丁」。於「点」。 云云。

#include<stdio.h>
int main() {
printf(
" ********\n"
" ************\n"
" ####....#.\n"
" #..###.....##....\n"
" ###.......###### ### ###\n"
" ........... #...# #...#\n"
" ##*####### #.#.# #.#.#\n"
" ####*******###### #.#.# #.#.#\n"
" ...#***.****.*###.... #...# #...#\n"
" ....**********##..... ### ###\n"
" ....**** *****....\n"
" #### ####\n"
" ###### ######\n"
"##############################################################\n"
"#...#......#.##...#......#.##...#......#.##------------------#\n"
"###########################################------------------#\n"
"#..#....#....##..#....#....##..#....#....#####################\n"
"########################################## #----------#\n"
"#.....#......##.....#......##.....#......# #----------#\n"
"########################################## #----------#\n"
"#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n"
"########################
 
##################    ############\n"
);
return ;
}

看着题解,心里自愧不如,你说编程不比别人好也就算了,语文也被吊打。。。

今天的内容就只有这些了,在最后,请广大博主帮我看看,这个代码是什么意思?(雾)python学的少,没见过世面(大雾)

import zlib,base64;print zlib.decompress(base64.b64decode('eJylUkEOwCAIu/sKk95Mxv+fN2AsE0S3xR42sRYqUqtHM5TJfsaBQQyQZ3jTGLp+JcqIjBUMSUMYy1Z6EB1J0hCOrhuywnoeXo4gF5U1I0nxJhc3rKSmH2vDd/Ny+nkMa6I3F7xmallrgvRh0K9L4DzLPLZQ9IY2CdekTKNjwK/qqdwK4J7TeZSa/wxtWKjc3W4VjdKdqt2tsIp2q3Y4AbV3oO4=')).decode()
上一篇:自定义tabBar


下一篇:背水一战 Windows 10 (12) - 绘图: Shape, Path