CSP——跳一跳

本文介绍了一个使用Java编写的简单程序,该程序通过循环读取用户输入的数据,并根据特定的规则进行计分。当用户输入1时,计分器会累加1分;对于其它任何非零输入,计分器会累加当前的临时得分(从0开始每次增加2),并更新总分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

解题代码:

import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Scanner sc=new Scanner(System.in);
		int sum=0;
		int temp=0;	//跳到中心的累加变量
		int x;
		while((x=sc.nextInt())!=0) {	//保证输入是个循环
			if(x==1) {
				sum=sum+1;
				temp=0;
			}
			else {
				temp=temp+2;	//跳到中心累加2分
				sum=sum+temp;
			}
		}
		System.out.println(sum);
	}
}

 

### 类似“”的C语言真题推荐 “”是款基于物理引擎的小游戏,玩家需要控制小方块跃到下个平台。这类游戏涉及到简单的几何计算、碰撞检测以及用户交互等内容,在CSP或其他编程竞赛中也有许多类似的问题。以下是几道适合练习的题目,它们可以帮助您熟悉相关知识点和技巧。 #### 1. 小球弹问题 **描述**: 个小球从定高度自由落下,每次碰到地面反弹回原高的半再继续下降直到停止。已知初始下落距离h米,请问经过n次落地后总共走了多少路程? 这个问题看似简单却很好地考察了循环结构与浮点数精度处理方面的知识。需要注意的是当剩余上升高度小于某个很小阈值时应该终止迭代避免死循环发生。 ```c #include <stdio.h> double calculate_total_distance(double initial_height, int bounce_times) { double total_distance = initial_height; for(int i=0;i<bounce_times;++i){ if(initial_height <= 0.01) break; // 设置最小高度阈值防止无限循环 initial_height /= 2; total_distance += 2 * initial_height; } return total_distance; } int main(){ printf("%.6f\n",calculate_total_distance(100,10)); } ``` --- #### 2. 跃机器人 **描述**: 在个由正整数组成的维数组A[]上有个起始位置index=0处的机器人,它可以向右移动至相邻的位置或直接跨越两个位置到达更远的地方(即可以从当前位置x到x+1 或 x+2)。如果当前格子数字大于等于要达到的目标格子,则允许该步跃。请问是否存在条路径使得机器人能够顺利抵达最后个元素? 此题不仅检验选手们对于分支判断语句及边界条件掌控力还考验他们思考递归关系或者采用记忆化搜索算法解决问题的能力。 ```c #include<stdio.h> #define MAX_SIZE 100 int can_jump(int arr[], int n); // 辅助函数用于实现DFS深搜过程 void dfs_search(int arr[], int index, int visited[]) { if(index >= n || visited[index]) return ; visited[index] = 1; if(can_jump(arr,n)){ printf("Yes"); exit(0); } if((index + 1)<n && !visited[index+1]){ dfs_search(arr,index+1,visited); } if((index + 2)<n && !visited[index+2]){ dfs_search(arr,index+2,visited); } } int can_jump(int arr[], int n) { int visited[MAX_SIZE]={}; dfs_search(arr, 0, visited); return 0; } int main(){ int a[]={2,3,1,1,4}; // 测试用例数组 int size=sizeof(a)/sizeof(*a); if(can_jump(a,size)) puts("YES"); else puts("NO"); } ``` --- #### 3. 方块堆叠塔 **描述**: 假设有若干个宽度不同的矩形砖块,每块都拥有固定的长度l[i], 它们的起点坐标分别为p[i].现在我们要把这些砖头按照定的顺序依次放置形成座尽可能高的垂直立柱。但是有如下规则约束: 新加入的方块底边必须完全覆盖住下面层顶部的所有缝隙才能成功叠加上去。请求出最高可达的高度是多少? 此类题目通常涉及贪心策略的应用——即每次都挑选最合适尺寸的那块来增加整体稳定性进而得到最优解法。 ```c #include<stdio.h> #include<stdbool.h> typedef struct Block{ float length; float start_position; }Block; float max_tower_height(Block blocks[], int num_blocks) { qsort(blocks,num_blocks,sizeof(Block),compare_start_positions); float current_max_right = blocks[0].length + blocks[0].start_position; float tower_height = blocks[0].length; for (int i = 1 ; i<num_blocks; ++i) { bool fits_on_top=false; while(current_max_right>=blocks[i].start_position){ fits_on_top=true;break;} if(fits_on_top){ current_max_right+=blocks[i].length; tower_height+=blocks[i].length; } } return tower_height;} static inline int compare_start_positions(const void*a,const void*b){ const Block* block_a=(Block*)a,*block_b=(Block*)b; return(block_a->start_position > block_b->start_position)? 1:-1; } int main() {Block bricks[]={{1,0},{2,-1},{3,1}}; printf("%g\n",max_tower_height(bricks, sizeof(bricks)/sizeof(*bricks))); } ``` 上述三类题目虽然不是严格按照“”游戏的具体玩法设计而来,但从核心机制上看都是围绕着空间位移、运动轨迹规划展开讨论,并且涵盖了常见的C语言程序设计要点如循环控制、数组操作、逻辑推演等。因此非常适合用来加深理解和巩固所学的基础知识!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值