1.实验题目
(2575)如果连续元素之间的差值的绝对值通过所有的值1到n-1,则n个0个整数的序列称为愉快跳数。例如1 ,4, 2, 3是一个快乐的跳线,因为绝对差异是3, 2,和1。这个定义意味着单个整数的任何序列都是一个愉快的跳跃。你要写一个程序来决定序列中的每一个序列是否是一个快乐跳跃者。
输入
每一行输入都包含一个整数n<3000,后跟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编写,连续元素之间的差值的绝对值是否通过所有的值1到n-1。
① 输入的形式和输入值的范围:每一行输入都包含一个整数n<3000,后跟n个整数代表序列。在所有输入中,元素的值都是整数
② 输出的形式:对于每一行输入,生成一行输出,表示“Jolly”或“Not jolly”。
③ 程序所能达到的功能:连续元素之间的差值的绝对值是否通过所有的值1到n-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()函数来求出相邻两个数的绝对值,再对这几个绝对值进行排序,判断绝对值是否通过所有的值1到n-1,若是即输出Jolly,否则输出Not jolly。
6.使用说明
程序名为1.exe,运行环境为VC++6.0。程序执行后显示
第一行输入n,空格,再输入n个数值,再点击回车键即输出结果,接下来又可以输入另一组数。
7.测试结果
1) 程序完成:
» 输入:2 16 3 27 7 435718618421382204544
输出:4
3
1234