厦门理工oj20级期中考1627欢乐的秋游(简便版)

博客围绕厦门理工oj20级期中考1627题展开,题目是涂鸭梨学姐秋游爬山,给出一组代表山顶或山谷高度的整数,需计算经过的山谷个数。还给出了输入输出要求及多个样例。

厦门理工oj20级期中考1627欢乐的秋游(简便版)

题目:涂鸭梨学姐参加秋游爬山活动,路途中需要经过多个山顶和山谷(山谷是指山间的低凹处)。给出一组整数代表山顶或山谷的高度,求秋游途中经过的山谷个数?

Input
第一行输入一个整数N,表示有N个高度,3 <= N <= 1000
第二行是N个数,表示N个高度值,且保证第一个数和最后一个数都是0。高度值范围:0 <= h <= 10000。
Output
一个整数,代表山谷的个数
样例1
3
0 6 0
样例2
5
0 3 2 4 0
样例3
9
0 2 1 1 3 2 1 4 0
Sample Output

样例1
0
样例2
1
样例3
2

#include<stdio.h>
//by linker7
int main(void)
{
	int N,z,count=0,h;
	int c[1000];
	scanf("%d",&N);
	for(z=0;z<N;z++){
		scanf("%d",&c[z]);
		getchar();
	}
	for(z=0;z<N-2;z++){
		if(c[z]==c[z+1]){continue;
		} 
		if(c[z]>c[z+1]&&c[z+1]<c[z+2]){count=count+1;continue;
		}
		if(c[z]>c[z+1]&&c[z+1]<=c[z+2]){h=z+2;
		while(c[z+1]==c[h]){h=h+1;
		if(c[z+1]<c[h]){count=count+1;
		};
		if(h==(N-1)){break;
		};
		}; 
	    };
	    }; 
	printf("%d",count);
	return 0;
}
### 厦门理工学院 OJ 跳舞毯子 题解及代码实现 跳舞毯子问题通常涉及路径规划、最短路径或最少步数的计算。根据提供的引用内容,厦门理工学院OJ平台上存在类似的题目设计[^5]。以下是针对该类问题的题解与代码实现。 #### 问题描述 假设有一个跳舞毯,每个位置上有一个非负整数,表示从当前位置可以跳跃的最大步数。目标是从起点跳到终点,求出最少的跳跃次数。 #### 解题思路 此问题可以通过动态规划(Dynamic Programming, DP)或广度优先搜索(Breadth-First Search, BFS)解决。以下为两种方法的分析: 1. **动态规划**:定义一个数组 `dp[i]` 表示到达第 `i` 个位置所需的最少跳跃次数。初始时,`dp[0] = 0`,其余位置设为无穷大。通过遍历每个位置并更新后续可到达的位置,最终得到 `dp[n-1]` 的值。 2. **广度优先搜索**:将问题建模为图,每个位置为一个节点,边权为跳跃步数。从起点开始进行 BFS,记录到达每个节点的最小跳跃次数。 #### 代码实现 以下是基于动态规划的 C++ 实现: ```cpp #include <iostream> #include <vector> #include <climits> using namespace std; int main() { int n; cin >> n; // 输入格子数量 vector<int> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; // 输入每个格子的最大跳跃长度 } vector<int> dp(n, INT_MAX); // 初始化 dp 数组 dp[0] = 0; // 起点跳跃次数为 0 for (int i = 0; i < n; ++i) { for (int j = 1; j <= nums[i] && i + j < n; ++j) { if (dp[i + j] > dp[i] + 1) { dp[i + j] = dp[i] + 1; // 更新跳跃次数 } } } if (dp[n - 1] == INT_MAX) { cout << "-1"; // 无法到达终点 } else { cout << dp[n - 1]; // 输出最少跳跃次数 } } ``` #### 算法复杂度 - 时间复杂度:O(n * m),其中 `n` 是格子数量,`m` 是最大跳跃长度。 - 空间复杂度:O(n),用于存储动态规划数组。 #### 注意事项 如果输入数据中存在无法到达终点的情况,需特别处理输出 `-1`[^5]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值