当前位置: 首页 > news >正文

1.4 洛谷入门一题单全解

本文主要给大家一些输入输出的例题,大家可以做一下,体会一下简单的算法思路,为后来写程序做准备

表达式

再重申一下表达式的概念:有运算符和数字或变量组成的式子,有返回值

下面几组都是表达式

5+(4*5)
(10+1000)*1141
a*b+c
( a*( (b+c)*d ) ) * ( d*( (c+b)*a ) ) % 20123

符号对照

数学

加号

减号

乘号

除号 整除

取余数

括号

C/C++

+

-

*

/

%

( )

本阶段的例题主要以表达式和文字输出的数学题为主

题单 【入门1】顺序结构 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

洛谷P1000 超级玛丽游戏

考的就是输入输出,可以用1.3讲过的raw string literal技术 复制粘贴水过

#include<iostream>
int main()
{std::cout<<R"(                ********************####....#.#..###.....##....###.......######              ###            ###...........               #...#          #...###*#######                 #.#.#          #.#.#####*******######             #.#.#          #.#.#...#***.****.*###....          #...#          #...#....**********##.....           ###            ###....****    *****....####        ##########        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############ )";return 0;
}

再介绍一种C语言常见的多行输出

#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 0;
}

有没有接触过Python的同学,py里的多行字符串也很好用

print("""                ********************####....#.#..###.....##....###.......######              ###            ###...........               #...#          #...###*#######                 #.#.#          #.#.#####*******######             #.#.#          #.#.#...#***.****.*###....          #...#          #...#....**********##.....           ###            ###....****    *****....####        ##########        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############""")

大神搜索解法 :from SLove_JT

#include <bits/stdc++.h>
using namespace std;
int p[100][100];
int last[100];
int n = 22, m = 62;
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++)p[i][j] = ch;
}
void draw(int x1, int y1, char ch = '#')
{draw(x1, y1, x1, y1, ch);
}
void drawland(int x, int y)
{draw(x, y, x+8, y+13);for(int i = x+1; i < x+8; i+=2)draw(i, y+1, i, y+12, '.');draw(x+1, y+4); draw(x+1, y+11);draw(x+3, y+3); draw(x+3, y+8);draw(x+5, y+6); draw(x+7, y+2);draw(x+7, y+5); draw(x+7, y+10);
}
// 以[x, y]为左上角绘制小岛
void drawisland(int x, int y)
{draw(x, y, x+3, y+19);draw(x+1, y+1, x+2, y+18, '-');draw(x+4, y+4, x+8, y+15);draw(x+4, y+5, x+7, y+14, '-');
}
// 以[x, y]为左上角绘制金币
void drawcoin(int x, int y)
{draw(x, y, x+5, y+4);draw(x+1, y+1, x+4, y+3, '.');draw(x+2, y+2, x+3, y+2);draw(x, y, ' '); draw(x+5, y, ' ');draw(x, y+4, ' '); draw(x+5, y+4, ' ');
}
// 以[x, y]为左上角绘制马里奥
void drawman(int x, int y)
{draw(x, y+5, x, y+12, '*'); x++;draw(x, y+4, x, y+15, '*'); x++;draw(x, y+4, x, y+7); draw(x, y+8, x, y+13, '.'); draw(x, y+12); x++;draw(x, y+2, x, y+14); draw(x, y+3, x, y+4, '.');draw(x, y+8, x, y+12, '.'); draw(x, y+15, x, y+18, '.'); x++;draw(x, y+2, x, y+17); draw(x, y+5, x, y+11, '.'); x++;draw(x, y+5, x, y+15, '.'); x++;draw(x, y+4, x, y+13); draw(x, y+6, '*'); x++;draw(x, y+1, x, y+17); draw(x, y+5, x, y+11, '*'); x++;draw(x, y, x+2, y+20, '.'); draw(x, y+4, x+2, y+16, '*');draw(x, y+3); draw(x, y+14, x+1, y+16); draw(x+1, y+16, '.');draw(x+2, y+8, x+2, y+11, ' '); draw(x, y+7, '.'); draw(x, y+12, '.');draw(x+3, y, x+4, y+19); draw(x+3, y+6, x+4, y+13, ' ');draw(x+3, y, x+3, y+1, ' '); draw(x+3, y+18, x+3, y+19, ' ');
}
void printscreen(){for(int i = 1; i <= n; i++)
{last[i] = m;while(p[i][last[i]] == ' ')last[i]--;}for(int i = 1; i <= n; i++,puts(""))for(int j = 1; j <= last[i]; j++)putchar(p[i][j]);
}
int main()
{for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)p[i][j] = ' ';// 绘制超级玛丽drawman(1, 12);// 绘制脚下的三个泥土块drawland(14, 1); drawland(14, 15); drawland(14, 29);// 绘制金币下面的那个管子drawisland(14, 43);// 绘制两个金币drawcoin(5, 43); drawcoin(5, 58);// 输出printscreen();return 0;
}

洛谷P1001 A+B Problem

这道题其实很简单,但也是初学者们(包括我)第一个真正意义上有结果、有输出的程序,意义还是非常重大的。

下面讲思路

代码模板

#include <iostream>
using namespace std;
int main() {return 0;
}

10^9在int的2^32次方范围以内,所以用int就可以。定义两个int变量存储两个加数

int a,b;

然后输入两个加数

cin >> a >> b;

然后就要用到最简单的加法表达式,存储到变量中

int c = a+b;
cout << c << endl;

完整代码

#include <iostream>
using namespace std;
int main(){int a,b;cin >> a >> b;int c = a+b;cout << c << endl;return 0;
}

洛谷B2002 Hello,World!

这道题直接复制粘贴就行了,没什么好说的

#include <stdio.h>
int main()
{puts("Hello,World!"); //输出字符串return 0;
}

洛谷B2025 输出字符菱形

这道题明显考的就是输出,直接输出就行,注意空格和换行

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

洛谷B2005 字符三角形

和前些题大同小异,只是要求输入字符,不要搞错了

  1. 定义char变量存储字符

  1. 按照格式输出

#include<stdio.h>
int main(){char a;scanf("%c",&a);printf("  %c\n %c%c%c\n%c%c%c%c%c",a,a,a,a,a,a,a,a,a);return 0;
}

洛谷P5703 【深基2.例5】苹果采购

开始做数学题了,数论可是C++竞赛的重要部分,有些模拟TLE的题就得靠数学!

这一题相信小学三年级就会了,人数×每个人分的数量=总采购数

#include<iostream>
using namespace std;
int main(){int a,b;cin >> a >> b;cout << a*b << endl;return 0;
}

洛谷 P5704 【深基2.例6】字母转换

这里要知道 ASCLL 码是什么:

在计算机中,字符以ASCLL 码的形式存储,每一个字符都对应一个整数数值

from 链接

不难发现,每个小写字母的数值都比大写字母多32 ,所以可以写出以下代码:

#include <iostream>
using namespace std;
int main()
{char c;cin >> c;cout << (char)(c-32) << endl;return 0;
}

强制类型转换:将一个类型转换成另一个类型的值,常用于字符和整数的转换,可能会出现数据精度减少或丢失的情况。

int a = 65;
cout << (char)(a) << endl;    //输出 'A'int b = 91;
cout << (float)(b)*1.99 << endl;    //输出181.09

洛谷P5705 【深基2.例7】数字反转

这道题可以定义五个字符变量,先正序输入,再倒序输出

#include<cstdio>
int main(){char a,b,c,d,e;scanf("%c%c%c%c%c",&a,&b,&c,&d,&e);printf("%c%c%c%c%c",e,d,c,b,a);return 0;
} 

洛谷P5706 【深基2.例8】再分肥宅水

仔细读题即可,每个人分到的水 = 水容积 / 人数,杯子数 = 人数 * 2

#include<cstdio>
int main(){int n;double t,a;scanf("%lf %d",&t,&n);printf("%.3f\n%d",t/n,n*2);    //保留三位小数return 0;
}

洛谷P5708 【深基2.习2】三角形面积

指开平方的意思,C++中<cmath> 头文件里有 sqrt 函数,可以对一个数开平方,返回一个浮点值

#include<iostream>
#include<cmath>    //sqrt
int main(){double a,b,c,p,s;cin >> a >> b >> c;p = (a+b+c) / 2;s = sqrt(p*(p-a)*(p-b)*(p-c));    //开平方printf("%.1f", s);return 0;
}

洛谷B2029 大象喝水

思路:先求出圆柱桶的体积,用总升数除以桶的容积,求出大象要喝多少水

注意:立方厘米和升的进率是 1000 ,除不尽的话得数要向上取整

#include<bits/stdc++.h>
using namespace std;
const double PI = 3.14;double r,h;
double b;int main()
{cin >> r >> h;b = 20000 / (PI*r*r*h) + 1;cout << b << endl;return 0;
}

洛谷P1425 小鱼的游泳时间

给大家提供一种比较保险的思路:

先算出总分钟数,再根据总分钟数算出小时和分钟。

总分钟数:

小时=总分钟 ÷ 60 ;分钟 = 总分钟 ÷ 60 的余数

#include<cstdio>
int main(){int a,b,c,d,s;scanf("%d %d %d %d",&a,&b,&c,&d);s= (c-a) * 60 + (d-b);printf("%d %d\n", s/60, s%60);return 0;
}

洛谷P1421 小玉买文具

思路:这还是一道考验单位转换的问题,可以把 __元__角 转换成角的形式,再除以19(1元9角)。

#include<iostream>
using namespace std;int main()
{int a,b,s;cin >> a >> b;s = (a*10+b) / 19;cout << s << endl;return 0;
}

洛谷P3954 [NOIP2017 普及组] 成绩

真的不敢相信17年普及组还有这样简单的题,直接套公式算就行。

#include<iostream>
using namespace std;
int main()
{int a,b,c,s;cin>>a>>b>>c;s=(a*0.2)+(b*0.3)+(c*0.5);cout << (s>=100? 100 : s) << endl;return 0;
}

"(s>=100? 100 : s)" 是三目运算符,大家可以上网了解一下,入门教程2会讲分支结构,里面有有关介绍。

总结

总算刷完题了,相信大家一定收获满满吧!“任何一个伟大的理想,都有一个微不足道的开始”加油💪

有兴趣可以移步专栏查看更多优质教程

掰掰ヾ(•ω•`)o

http://www.xdnf.cn/news/1092475.html

相关文章:

  • Explain关键字
  • Markdown 语法规则
  • 什么是 AMR 格式?简鹿音频转换器轻松批量转换 AMR 为 MP3
  • PHP语法高级篇(一):日期时间处理和包含文件
  • LLaMA 学习笔记
  • 装配式建筑4.0:当房子像汽车一样被“智造”
  • 数据结构——深度优先搜索与广度优先搜索的实现
  • 人机协同的关键枢纽:软件工程3.0中对象模型与模型驱动的融合路径
  • VSCode配置Cline插件调用MCP服务实现任务自动化
  • langchain从入门到精通(四十一)——基于ReACT架构的Agent智能体设计与实现
  • 陶哲轩:数学界的莫扎特与跨界探索者
  • Lingo软件学习(一)好学爱学
  • Grafana容器化部署
  • 工业通讯网关在电子制造中的核心作用——从DeviceNet到Modbus TCP的智能转换
  • Vue响应式原理三:响应式依赖收集-类
  • 【Python】FastApi
  • 腾讯云COS,阿里云OSS对象存储服务-删除操作的响应码204
  • S7-1500——(一)西门子PLC编程从入门到精通4、SCL间接寻址
  • 项目进度受制于资源分配,如何动态调配资源
  • LeetCode 138题解 | 随机链表的复制
  • 5202年安装TensorFlow纪实
  • 向量空间 线性代数
  • 解锁HTML5页面生命周期API:前端开发的新视角
  • 超越公有云:在裸金属服务器上构建低成本、高性能的静态资源服务
  • STM32 使用HAL库获取us时间
  • 【使用Flask基于PaddleOCR3.0开发一个接口 调用时报错RuntimeError: std::exception】
  • HCIP(综合实验)
  • 代码随想录总结
  • css 设置 input 插入光标样式
  • 20250709: WSL+Pycharm 搭建 Python 开发环境