时间限制 : 1 秒
内存限制 : 128 MB
大楼的每一层楼都可以停电梯,而且第 i 层楼(1<=i<=N)上有一个数字 Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5 代表了 Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有-2 楼。那么,从 A 楼到 B 楼至少要按几次按钮呢?
输入
输入文件共有二行,第一行为三个用空格隔开的正整数,表示 N,A,B(1≤N≤200, 1≤A,B≤N),第二行为 N 个用空格隔开的正整数,表示 Ki。
输出
输出文件仅一行,即最少按键次数,若无法到达,则输出-1。
样例
输入
5 1 5 3 3 1 2 5
输出
3
答案:
#include
int main() {
int N, A, B;
int arr[200];
int count = 0;
scanf("%d%d%d", &N, &A, &B);
for (int i = 1; i <= N; i++) {
scanf("%d", &arr[i]);
}
while (N) {
if (A == B) {
break;
}
else if (A + arr[A] <= B) {
A = A + arr[A];
count++;
}
else if(A+arr[A]>B&&A-arr[A]>=0) {
A = A - arr[A];
count++;
}
N--;
}
if (N == 0) {
printf("%d", N - 1);
}
else {
printf("%d", count);
}
}
分析:这个题目难度很大,第一次看这个题目可能会读不懂题目,我也是。通过B站搜索讲解才知道这个题目的意思。题目的意思是每个楼层都有一个数字K,这个数字的意思是可以向上走K层或者向下走K层。向下走K层。向上走后,所到达的层数不能超过最高的楼层,同理,向下走到达的楼层不能为负值。可根据此写出代码逻辑。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。
输入
输入只有一行, 包含一个字符。
输出
该字符构成的等腰三角形,底边长5个字符,高3个字符。
样例
输入
*
输出
* *** *****
#include
int main() {
char a = 0;
scanf("%c", &a);
int i = 0, j = 0;
for (i = 0; i < 3; i++) {
for (int k = 1; k < 3 - i; k++) {
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++) {
printf("%c",a);
}
printf("\n");
}
}
分析:本题难度适中,但是初次见到这个题目,很多人用多个printf语句进行打印,虽然也可以,但是没达到编程训练的目的。我们要知道每一层字符个数和层数的关系,这样通过这个关系进行打印才能得到编程训练的目的。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
用"*"输出一个对角线长5个"*"倾斜放置的菱形。(如样例中的图形)
输入
无
输出
样例中的菱形
样例
输入
无
输出
* *** ***** *** *
答案:
#include
int main() {
int i = 1, j = 1,k=1;
//打印上半部分
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3 - i; j++) {
printf(" ");
}
for (k = 1; k <= 2*i-1; k++) {
printf("*");
}
printf("\n");
}
//打印下半部分
for (i = 1; i <= 2; i++) {
for (j = 1; j <= i; j++) {
printf(" ");
}
for (k = 1; k <= 2 * (3-i) - 1; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
分析:这个题的难度是在上一个题的基础上增加了,有的同学可能还是用多个printf语句进行打印,答案是能通过,但是达不到编程训练的目的。我们要达到编程训练的目的。这个题难就难在下面那部分的处理,但是万变不离其宗。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
打印下面的字符图形
*****
***
*
***
*****
输入
无输入
输出
见样例输出
样例
输入
输出
***** *** * *** *****
答案:
#include
int main() {
int i = 1, j = 1, k = 1;
//先打印上部分
for (i = 3; i >= 1; i--) {
for (k = 1; k <= 3 - i; k++) {
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
//再打印下部分
for (i = 2; i <= 3; i++) {
for(k = 1; k <= 3 - i; k++) {
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
}
分析:把问题分为两个子问题,上面打印一个倒三角,下面打印一个正三角,但是少了顶部那一行。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。
输入
无。
输出
如样例所示
样例
输入
输出
******** ************ ####....#. #..###.....##.... ###.......###### ### ### ### ### ........... #...# #...# #...# #...# ##*####### #.#.# #.#.# #.#.# #.#.# ####*******###### #.#.# #.#.# #.#.# #.#.# ...#***.****.*###.... #...# #...# #...# #...# ....**********##..... ### ### ### ### ....**** *****.... #### #### ###### ###### ############################################################## ################################## #...#......#.##...#......#.##...#......#.##------------------# #...#......#.##------------------# ###########################################------------------# ###############------------------# #..#....#....##..#....#....##..#....#....##################### #..#....#....##################### ########################################## #----------# ############## #----------# #.....#......##.....#......##.....#......# #----------# #.....#......# #----------# ########################################## #----------# ############## #----------# #.#..#....#..##.#..#....#..##.#..#....#..# #----------# #.#..#....#..# #----------# ########################################## ############ ############## ############
答案:
#include
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;
}
分析:就是一行一行输入,打印出结果,就是注意换行的在处理即可
是否通过: