记录洛谷刷题过程QAQ
一、超级玛丽游戏
洛谷原址
题目描述
超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。
********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
输入格式
无
输出格式
如描述
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
printf(" ********\n");
printf(" ************\n");
printf(" ####....#.\n");
printf(" #..###.....##....\n");
printf(" ###.......###### ### ###\n");
printf(" ........... #...# #...#\n");
printf(" ##*####### #.#.# #.#.#\n");
printf(" ####*******###### #.#.# #.#.#\n");
printf(" ...#***.****.*###.... #...# #...#\n");
printf(" ....**********##..... ### ###\n");
printf(" ....**** *****....\n");
printf(" #### ####\n");
printf(" ###### ######\n");
printf("##############################################################\n");
printf("#...#......#.##...#......#.##...#......#.##------------------#\n");
printf("###########################################------------------#\n");
printf("#..#....#....##..#....#....##..#....#....#####################\n");
printf("########################################## #----------#\n");
printf("#.....#......##.....#......##.....#......# #----------#\n");
printf("########################################## #----------#\n");
printf("#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n");
printf("########################################## ############\n");
return 0;
}
二、A+B Problem
洛谷原址
题目描述
输入两个整数
a
,
b
a, b
a,b,输出它们的和(
∣
a
∣
,
∣
b
∣
≤
10
9
|a|,|b| \le {10}^9
∣a∣,∣b∣≤109)。
注意
- Pascal 使用
integer 会爆掉哦! - 有负数哦!
- C/C++ 的 main 函数必须是
int 类型,而且 C 最后要 return 0 。这不仅对洛谷其他题目有效,而且也是 NOIP/CSP/NOI 比赛的要求!
好吧,同志们,我们就从这一题开始,向着大牛的路进发。
任何一个伟大的思想,都有一个微不足道的开始。
输入格式
两个以空格分开的整数。
输出格式
一个整数。
样例 #1
样例输入 #1
20 30
样例输出 #1
50
代码如下:
#include <stdio.h>
int main(){
double Sn=0;
int k;
scanf("%d",&k);
int i=1;
while (1)
{
Sn = Sn+1.0/i;
if(Sn>k)
{
printf("%d",i);
break;
}
i++;
}
return 0;
}
三、[NOIP2002 普及组] 级数求和
题目描述
已知:
S
n
=
1
+
1
2
+
1
3
+
…
+
1
n
S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}
Sn?=1+21?+31?+…+n1?。显然对于任意一个整数
k
k
k,当
n
n
n 足够大的时候,
S
n
>
k
S_n>k
Sn?>k。
现给出一个整数
k
k
k,要求计算出一个最小的
n
n
n,使得
S
n
>
k
S_n>k
Sn?>k。
输入格式
一个正整数
k
k
k。
输出格式
一个正整数
n
n
n。
样例 #1
样例输入 #1
1
样例输出 #1
2
提示
【数据范围】
对于
100
%
100\%
100% 的数据,
1
≤
k
≤
15
1\le k \le 15
1≤k≤15。
【题目来源】
NOIP 2002 普及组第一题
代码如下:
#include <stdio.h>
int main(){
double Sn=0;
int k;
scanf("%d",&k);
int i=1;
while (1)
{
Sn = Sn+1.0/i;
if(Sn>k)
{
printf("%d",i);
break;
}
i++;
}
return 0;
}
四、陶陶摘苹果
洛谷原址
题目描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出
10
10
10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个
30
30
30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知
10
10
10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式
输入包括两行数据。第一行包含
10
10
10 个
100
100
100 到
200
200
200 之间(包括
100
100
100 和
200
200
200 )的整数(以厘米为单位)分别表示
10
10
10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个
100
100
100 到
120
120
120 之间(包含
100
100
100 和
120
120
120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式
输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
样例 #1
样例输入 #1
100 200 150 140 129 134 167 198 200 111
110
样例输出 #1
5
提示
【题目来源】
NOIP 2005 普及组第一题
代码如下:
#include<stdio.h>
int main(){
const int CHAIR = 30;
int h[10], high, flag=0;
for(int i=0; i<10; i++){
scanf("%d", &h[i]);
}
scanf("%d", &high);
for(int i=0; i<10; i++){
if( h[i] <= high+CHAIR ){
flag +=1;
}
}
printf("%d", flag);
return 0;
}
五、校门外的树
洛谷原址
题目描述
某校大门外长度为
l
l
l 的马路上有一排树,每两棵相邻的树之间的间隔都是
1
1
1 米。我们可以把马路看成一个数轴,马路的一端在数轴
0
0
0 的位置,另一端在
l
l
l 的位置;数轴上的每个整数点,即
0
,
1
,
2
,
…
,
l
0,1,2,\dots,l
0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度
l
l
l 和区域的数目
m
m
m。
接下来
m
m
m 行,每行两个整数
u
,
v
u, v
u,v,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
样例 #1
样例输入 #1
500 3
150 300
100 200
470 471
样例输出 #1
298
提示
【数据范围】
- 对于
20
%
20\%
20% 的数据,保证区域之间没有重合的部分。
- 对于
100
%
100\%
100% 的数据,保证
1
≤
l
≤
1
0
4
1 \leq l \leq 10^4
1≤l≤104,
1
≤
m
≤
100
1 \leq m \leq 100
1≤m≤100,
0
≤
u
≤
v
≤
l
0 \leq u \leq v \leq l
0≤u≤v≤l。
【题目来源】
NOIP 2005 普及组第二题
代码如下:
#include<stdio.h>
int main()
{
int l,m;
scanf("%d%d",&l,&m);
int tree[l+1],i,j;
for(i=0;i<=l;i++)
{
tree[i]=1;
}
int x1,x2;
for(i=0;i<m;i++)
{
scanf("%d%d",&x1,&x2);
for(j=x1;j<=x2;j++)
{
if(tree[j]==1) tree[j]=0;
}
}
int temp=0;
for(i=0;i<=l;i++)
{
if(tree[i]!=0) temp++;
}
printf("%d\n",temp);
return 0;
}
|