有趣的跳跃(循环判断)

有趣的跳跃

一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1)。例如,1 4 2 3存在“有趣的跳跃”,因为差的绝对值分别为3,2,1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在“有趣的跳跃” 输入:一行,第一个数是n(0 < n < 3000),为序列长度,接下来有n个整数,依次为序列中各元素,各元素的绝对值均不超过1,000,000,000。 输出:一行,若该序列存在“有趣的跳跃”,输出"Jolly",否则输出"Not jolly"。 样例输入:4 1 4 2 3 样例输出:Jolly

阅读题目可知,一段数字中相邻两个数的绝对值差可以排成序列,可以有以下思路:

  1. 假设一个成立的结果,预定有有趣的序列
  2. 设一个a[1]-[n-1]记录差值出现的次数
  3. 依次判断每次出现的值(1)范围不在1-(n-1)的 (2)出现重复次数的
  4. 序列中只有单个元素也是满足条件!

先假设满足条件

bool flag=0;
    scanf("%d",&n);//输入序列的长度
	for(int i=1;i<=n;i++){    
    scanf("%d",&b[i]);
    }    //依次输入序列的每位元素

设立一个temp来存放差值

abs()函数主要是对int求绝对值

fabs()对float,double求绝对值

abs()包含在<stdlib.h>头文件中,fabs()包含在<cmath>头文件中。

for(int i=2;i<=n;i++){           //循环n-1次存放差值
		int tmp=fabs(b[i]-b[i-1]);   //后一位减去前一位取绝对值

开始判断思路3里的两种情况

    if(tmp>=n||tmp==0)   //如果范围不在1-(n-1)当中
    {flag=1;break;}	     //不满足
	a[tmp]++;           //用a数组来存放出现重复的情况
	if(a[tmp]>1)        //如果出现差值重复的情况
    {flag=1;break;}	    //不满足

最后对满足的情况做一个判断

   if(n==1||flag==0)   //满足单独元素和成立的情况,输出jolly
       printf("Jolly\n"); 
   else                //不满足的情况
       printf("Not jolly");		

整体代码

#include<cstdio>
#include<cmath>
const int maxn=3010;
int n,m,a[maxn],b[maxn];
bool flag=0;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
    scanf("%d",&b[i]);
	for(int i=2;i<=n;i++){
		int tmp=fabs(b[i]-b[i-1]);
		if(tmp>=n||tmp==0){flag=1;break;}	
		a[tmp]++;
		if(a[tmp]>1){flag=1;break;}	
	}
	if(n==1||flag==0)
         printf("Jolly\n");
	else 
         printf("Not jolly");		
}

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 垂直跳跃动作可以通过easyxC++中的键盘事件和定时器事件实现。下面是一个简单的示例代码: ``` #include <graphics.h> #include <conio.h> int main() { initgraph(640, 480); // 初始化图形窗口 int x = 320, y = 400; // 初始位置为屏幕中央 int vy = 0; // 初始竖直速度为0 int g = 1; // 重力加速度为1 int jumpSpeed = -15; // 跳跃速度为-15 int jumpHeight = 100; // 跳跃高度为100 bool jumping = false; // 是否跳跃标志位 while (!kbhit()) // 循环直到有键盘输入 { cleardevice(); // 清空屏幕 // 更新竖直速度 if (jumping) { vy += g; } // 更新位置 y += vy; // 绘制角色 setfillcolor(BLUE); fillcircle(x, y, 10); // 判断是否到达地面或跳跃高度 if (y >= 400) { y = 400; vy = 0; jumping = false; } else if (y <= 400 - jumpHeight) { jumping = false; } // 监听键盘事件 if (GetAsyncKeyState(VK_SPACE) && !jumping) { vy = jumpSpeed; jumping = true; } Sleep(10); // 等待10毫秒,降低CPU占用率 } closegraph(); // 关闭图形窗口 return 0; } ``` 在这个示例中,我们使用了一个循环来不断更新角色的位置和竖直速度。当角色到达地面时,竖直速度归零,并且将跳跃标志位设置为false;当角色到达跳跃高度时,跳跃结束。我们还监听了键盘事件,在用户按下空格键时触发跳跃动作。 你可以根据自己的需要修改代码中的一些参数,例如角色的起始位置、跳跃速度和跳跃高度等。 ### 回答2: 在基于easyxC的垂直跳跃动作实现中,我们首先需要定义一个角色对象并将其放置在初始位置。然后,我们可以使用easyxC中的相关函数来实现跳跃动作。 我们可以通过设置角色对象的初始垂直速度和重力加速度来模拟跳跃行为。当角色对象执行跳跃动作时,我们可以使用循环语句来实现角色对象的垂直移动,并在每次循环中更新角色对象的位置和速度。 具体实现中,可以使用`initgraph`函数来创建绘图窗口,并使用`IMAGE`结构体来加载和显示角色对象的图像。然后,可以使用`getfps`函数来获取屏幕刷新率,并在每次循环中使用`Sleep`函数来控制跳跃动作的速度。 在循环中,我们可以使用`kbhit`函数来检测键盘输入,当用户按下跳跃键时,我们可以增加角色对象的垂直速度来触发跳跃动作。在每个循环迭代中,我们需要更新角色对象的位置和速度,并检测角色对象是否触地。如果角色对象触地,则将垂直速度重置为0,完成一次跳跃动作。 另外,我们还可以添加地面碰撞检测,以避免角色对象在下落过程中穿过地面。通过检测角色对象与地面对象的碰撞,我们可以在跳跃过程中确保角色对象能够正确地与地面进行交互。 通过以上方式,结合easyxC中提供的函数和方法,我们可以实现基于easyxC的垂直跳跃动作。这样,我们就可以使用easyxC来开发各种有趣的游戏或动画,添加更加生动和多样化的交互体验。 ### 回答3: easyxC 是一种用于实现图形化编程的软件开发工具,可以构建游戏、动画和交互式应用程序。要实现垂直跳跃动作,可以按照以下步骤进行: 1. 创建角色:首先,我们需要创建一个角色或者对象来代表游戏中的主要角色。在 easyxC 中,可以使用“创建角色”或者“创建对象”的功能来实现。我们可以选择一个合适的形状和外观来创建角色,如一个小人物或者小动物。 2. 定义跳跃动作:在角色创建好之后,我们需要定义垂直跳跃的动作。在 easyxC 中,可以使用“动画编辑器”或者编程方式来实现。我们可以定义跳跃过程中的关键帧和动作流程,如起跳、上升、下降和着陆等。 3. 添加控制:为了实现跳跃动作的交互性,我们需要添加一些控制方式。在 easyxC 中,可以使用键盘按键、鼠标点击或者触摸屏操作等方式来控制角色的跳跃动作。我们可以为相应的控制方式添加事件处理函数,当发生相应的操作时,角色执行跳跃动作。 4. 设置物理效果:为了使垂直跳跃动作更加真实,可以通过添加物理效果来模拟重力和碰撞。在 easyxC 中,可以使用物理引擎来实现这些效果。我们可以设置角色的重力和碰撞属性,使得角色在跳跃过程中遵循物理规律。 5. 调试和优化:在实现垂直跳跃动作之后,我们需要对程序进行调试和优化,确保动作的流畅性和正确性。在 easyxC 中,可以使用调试工具来检查和修复可能存在的错误或者问题。 通过以上步骤,基于 easyxC 可以实现具有垂直跳跃动作的游戏或者动画。具体实现的方式和细节可能会根据实际需求和个人技术水平而有所不同,但以上是一个基本的思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Doomer_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值