OJ系统刷题 第二篇

3502 - 奇怪的电梯

时间限制 : 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<stdio.h>

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层。向上走后,所到达的层数不能超过最高的楼层,同理,向下走到达的楼层不能为负值。可根据此写出代码逻辑。

是否通过:

 11102 - 字符三角形

时间限制 : 1 秒

内存限制 : 128 MB

给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。

输入

输入只有一行, 包含一个字符。

输出

该字符构成的等腰三角形,底边长5个字符,高3个字符。

样例

输入

*

输出

  *
 ***
*****
#include<stdio.h>

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语句进行打印,虽然也可以,但是没达到编程训练的目的。我们要知道每一层字符个数和层数的关系,这样通过这个关系进行打印才能得到编程训练的目的。

是否通过:

 

 11103 - 输出菱形

时间限制 : 1 秒

内存限制 : 128 MB

用"*"输出一个对角线长5个"*"倾斜放置的菱形。(如样例中的图形)

输入

输出

样例中的菱形

样例

输入

输出

  *
 ***
*****
 ***
  *

 答案:

#include<stdio.h>

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语句进行打印,答案是能通过,但是达不到编程训练的目的。我们要达到编程训练的目的。这个题难就难在下面那部分的处理,但是万变不离其宗。

是否通过:

11106 - 打印简单字符

时间限制 : 1 秒

内存限制 : 128 MB

打印下面的字符图形

*****
 ***
  *
 ***
*****

输入

无输入

输出

见样例输出

样例

输入

输出

*****
 ***
  *
 ***
*****

答案:

#include<stdio.h>

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");
	}
}

分析:把问题分为两个子问题,上面打印一个倒三角,下面打印一个正三角,但是少了顶部那一行。

是否通过:

 11107 - 超级玛丽游戏

时间限制 : 1 秒

内存限制 : 128 MB

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

输入

无。

输出

如样例所示

样例

输入

输出

********
               ************
               ####....#.
             #..###.....##....
             ###.......######              ###                 ###           ###           ###
                ...........               #...#               #...#         #...#         #...#
               ##*#######                 #.#.#               #.#.#         #.#.#         #.#.#
            ####*******######             #.#.#               #.#.#         #.#.#         #.#.#
           ...#***.****.*###....          #...#               #...#         #...#         #...#
           ....**********##.....           ###                 ###           ###           ###
           ....****    *****....
             ####        ####
           ######        ######
##############################################################              ##################################
#...#......#.##...#......#.##...#......#.##------------------#              #...#......#.##------------------#
###########################################------------------#              ###############------------------#
#..#....#....##..#....#....##..#....#....#####################              #..#....#....#####################
##########################################    #----------#                  ##############    #----------#
#.....#......##.....#......##.....#......#    #----------#                  #.....#......#    #----------#
##########################################    #----------#                  ##############    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#                  #.#..#....#..#    #----------#
##########################################    ############                  ##############    ############

答案:

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

分析:就是一行一行输入,打印出结果,就是注意换行的在处理即可

是否通过:

 

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值