快乐跳数

1.实验题目

2575)如果连续元素之间的差值的绝对值通过所有的值1n-1,则n0个整数的序列称为愉快跳数。例如1 ,4, 2, 3是一个快乐的跳线,因为绝对差异是3, 2,和1。这个定义意味着单个整数的任何序列都是一个愉快的跳跃。你要写一个程序来决定序列中的每一个序列是否是一个快乐跳跃者。

输入

每一行输入都包含一个整数n3000,后跟n个整数代表序列。

输出

对于每一行输入,生成一行输出,表示Jolly”或“Not jolly”。

输入范例1】4 1 4 2 3

输出范例1】Jolly

输入范例2】5 1 4 2 -1 6

输出范例2】Not jolly

2.需求分析

本演示程序用VC++6.0编写,连续元素之间的差值的绝对值是否通过所有的值1n-1
① 输入的形式和输入值的范围:每一行输入都包含一个整数n3000,后跟n个整数代表序列。在所有输入中,元素的值都是整数
② 输出的形式:对于每一行输入,生成一行输出,表示“Jolly”或“Not jolly”。

③ 程序所能达到的功能:连续元素之间的差值的绝对值是否通过所有的值1n-1

④ 测试数据:
【【输入范例1】4 1 4 2 3

输出范例1】Jolly

输入范例2】5 1 4 2 -1 6

输出范例2】Not jolly

3.概要设计

1)为了实现上述程序功能,需要定义数组接收输入的数据以及绝对值

int a[3000];

int b[3000];  

2)本程序包含2个函数:
 主函数main()
 输入序列函数input()

③判断是否是快乐跳数函数f(n)

各函数间关系如下:

               main()        input()       f(n)       main()

 

4.详细设计

1) 要实现以上功能,要定义数组来接收输入的数以及相邻两个数的绝对值

 int n;

int a[3000];

int b[3000];

void input()//输入序列数

{

int i;

for(i=0;i<n;i++)

cin>>a[i];           //输入n个数

}

 int f()

{

int i,j,m,t,k;

    for(i=0;i<n-1;i++)

        b[i]=abs(a[i+1]-a[i]);//绝对值的运算

 

3)具体程序代码:

#include<iostream>

using namespace std;

int n;

int a[3000];

int b[3000];

void input()//输入序列数

{

int i;

for(i=0;i<n;i++)

cin>>a[i];           //输入n个数

}

 int f()

{

int i,j,m,t,k;

    for(i=0;i<n-1;i++)

        b[i]=abs(a[i+1]-a[i]);//绝对值的运算

    for(m=0;m<n-1;m++)//实现一个区间的排序,采用快速排序法;

{

      t=b[m];

  k=m-1;

  while(t<b[k])

  {

  b[k+1]=b[k];k--;

  if(k==-1)break;

  }

  b[k+1]=t;

 

}

    for(i=1,j=0;i<=n-1;i++)

        if(b[j++]!=i) return false;

    return true;

}

int main()

{

while(cin>>n)

 {

 input();

 if(f())

 cout<<"Jolly"<<endl;

 else

 cout<<"Not jolly"<<endl;

 }

return 0;

}

5.调试分析
#include<iostream>

using namespace std;

int n;

int a[3000];

int b[3000];

void input()//输入序列数

{

int i;

for(i=0;i<n;i++)

cin>>a[i];           //输入n个数

}

 int f()

{

int i,j,m,t,k;

    for(i=0;i<n-1;i++)

        b[i]=abs(a[i+1]-a[i]);//绝对值的运算

    for(m=0;m<n-1;m++)//实现一个区间的排序,采用快速排序法

{

      t=b[m];

  k=m-1;

  while(t<b[k])     //判断大小对b[]进行排序

  {

  b[k+1]=b[k];k--;

  if(k==-1)break;

  }

  b[k+1]=t;

}

    for(i=1,j=0;i<=n-1;i++)

        if(b[j++]!=i) return false;     //b[j++]!=i则是错误

    return true;                        //else是正确的

}

int main()

{

while(cin>>n)

 {

 input();

 if(f())

 cout<<"Jolly"<<endl;

 else

 cout<<"Not jolly"<<endl;

 }

return 0;

}

调试时,进入主函数,执行输入语句,输入n值,根据n值来输入n个数据,再通过abs()函数来求出相邻两个数的绝对值,再对这几个绝对值进行排序,判断绝对值是否通过所有的值1n-1,若是即输出Jolly,否则输出Not jolly

6.使用说明

程序名为1.exe,运行环境为VC++6.0。程序执行后显示


第一行输入n,空格,再输入n个数值,再点击回车键即输出结果,接下来又可以输入另一组数。

7.测试结果

1程序完成
» 输入2 16 3 27 7 435718618421382204544

输出:4

3

1234

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值