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 字符三角形

和前些题大同小异,只是要求输入字符,不要搞错了
-
定义char变量存储字符
-
按照格式输出
#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