例19   欢乐的跳

题目描述

一个n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n-1]之间的所有整数,则称之符合“欢乐的跳”,如数组1 4 2 3符合“欢乐的跳”,因为差的绝对值分别为:3,2,1。

给定一个数组,你的任务是判断该数组是否符合“欢乐的跳”。

输入格式

每组测试数据第一行以一个整数n(1≤n≤1000)开始,接下来n个空格隔开的整数。

输出格式

对于每组测试数据,输出一行若该数组符合“欢乐的跳”则输出"Jolly",否则输出"Not jolly"。

输入样例 #1

4 1 4 2 3

输出样例 #1

Jolly

输入样例 #2

5 1 4 2 -1 6

输出样例 #2

Not jolly

(1)编程思路。

为了判断数组两个连续元素之间差的绝对值是否包括了[1,n-1]之间的所有整数,定义一个数组int hash[1001],其中hash[i]=0表示整数i未出现,hash[i]=1表示整数i出现过。初始时,hash数组的全部元素值均为0。

对n个元素的数组a,用循环for (i=1;i

之后,判断数组hash的情况,若数组元素hash[1]~hash[n-1]的值全为1,则表示数组a中两个连续元素之间差的绝对值包括了[1,n-1]之间的所有整数。

(2)源程序。

#include

#include

int main()

{

int hash[1001]={0},a[1001],n,i,d;

scanf("%d",&n);

for (i=0;i

scanf("%d",&a[i]);

for (i=1;i

{

d=abs(a[i]-a[i-1]);

if (d<=n-1) hash[d]=1;

}

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

if (hash[i]==0) break;

if (i

printf("Not jolly

");

else

printf("Jolly

");

return 0;

}

习题19

19-1  校门外的树

本题选自洛谷题库 (https://www.luogu.org/problem/P1047)

题目描述

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,…,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入格式

第一行有2个整数L((1≤L≤10000)和 M(1≤M≤100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。

接下来的M行每行包含2个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出格式

1个整数,表示马路上剩余的树的数目。

输入样例

500 3

150 300

100 200

470 471

输出样例

298

(1)编程思路。

定义数组int f[10001],其中f[i]=1表示坐标为i的位置有一棵树,f[i]=0表示坐标为i的位置的树被移走了。初始时,数组的元素f[0]~f[l]全部置为1,表示长度为L的马路上每间隔1米有一棵树。

每输入一组区域的起始点和终止点的坐标begin和end,就将f[begin]~f[end]之间的数组元素的值修改为0,表示树被移走了。

最后,统计数组f中值为1的元素的个数,就是马路上剩余的树的数目。

(2)源程序。

#include

int main()

{

int l,m,begin,end,i,cnt;

int f[10001];

scanf("%d%d",&l,&m);

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

f[i]=1;

while (m--)

{

scanf("%d%d",&begin,&end);

for (i=begin;i<=end;i++)

f[i]=0;

}

cnt=0;

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

{

if (f[i]==1)

cnt++;

}

printf("%d

",cnt);

return 0;

}

19-2  校门外的树(增强版)

本题选自洛谷题库 (https://www.luogu.org/problem/P1276)

题目描述

校门外马路上本来从编号0到L,每一编号的位置都有1棵树。有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B);幸运的是还有植树者每次从编号C到D 中凡是空穴(树被砍且还没种上树苗或树苗又被砍掉)的地方都补种上树苗(记 1 C D,含C和D);问最终校门外留下的树苗多少棵?植树者种上又被砍掉的树苗有多少棵?

输入格式

第一行L和N,表示校园外原来有L+1棵树,并有N次砍树或种树的操作。

以下N行,砍树或植树的标记和范围,每行3个整数。

L(1 <= L <= 10000)和 N(1 <= N <= 100)

输出格式

共两行。第1行校门外留下的树苗数目,第2行种上又被拔掉的树苗数目。

输入样例

10 3

0 2 6

1 1 8

0 5 7

输出样例

3

2

(1)编程思路。

本题思路与上题类同。同样定义数组int f[10001],其中f[i]=1表示坐标为i的位置有一棵树,f[i]=2表示坐标为i的位置补种了一颗树苗,f[i]=0表示坐标为i的位置的树或树苗被移走了。初始时,数组的元素f[0]~f[l]全部置为1,表示长度为L的马路上每间隔1米有一棵树。

程序中根据砍树或种树的操作对数组f的相应元素进行处理。具体见源程序。

(2)源程序。

#include

int main()

{

int l,n,m,begin,end,i,cnt1,cnt2;

int f[10001];

scanf("%d%d",&l,&n);

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

f[i]=1;       // 初始为一棵树

cnt2=0;          // 种上又被砍掉的树苗数

while (n--)

{

scanf("%d%d%d",&m,&begin,&end);

if (m==0)    // 砍树或树苗

{

for (i=begin;i<=end;i++)

{

if (f[i]==2)  cnt2++;   // 树苗被砍掉了

f[i]=0;

}

}

else        // 种树苗

{

for (i=begin;i<=end;i++)

if (f[i]==0)

f[i]=2;

}

}

cnt1=0;         // 留下的树苗数

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

{

if (f[i]==2)

cnt1++;

}

printf("%d

%d

",cnt1,cnt2);

return 0;

}

19-3  珠心算测验

题目描述

珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

最近老师出了一些测验题,请你帮忙求出答案。

输入格式

共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。

第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。

输出格式

一个整数,表示测验题答案。

输入样例

4

1 2 3 4

输出样例

2

说明/提示

【样例说明】

由1+2=3,1+3=4,故满足测试要求的答案为2。

注意,加数和被加数必须是集合中的两个不同的数。

(1)编程思路。

为了判断集合中有多少个数恰好等于集合中另外两个(不同的)数之和,定义一个数组int hash[10001],其中hash[i]=0表示整数i作为和值未出现,hash[i]=1表示整数i作为和值第1次出现了,hash[i]=2表示整数i作为和值不止1次出现了,只能算一次。初始时,hash数组中,属于集合元素的hash数组相应元素值置1,其余非集合元素的相应hash元素值均为0。

用二重循环

for (i=0;i

for (j=i+1;j

对集合中任意两个不同元素的和值t(t=num[i]+num[j])进行处理。若和值t的对应的hash[t]等于1,表示集合中存在元素t为另外两个不同元素的和,计数,同时置hash[t]=2,以避免下次再出现和值t产生重复计数。

(2)源程序。

#include

int main()

{

int n,i,j,t,cnt=0,num[100];

int hash[10001]={0};

scanf("%d",&n);

for (i=0;i

{

scanf("%d",&num[i]);

hash[num[i]]=1;

}

for (i=0;i

for (j=i+1;j

{

t=num[i]+num[j];

if (t<=10000 && hash[t]==1)

{

cnt++;

hash[t]=2;  // 注意:1+4和2+3也算重复,需去掉

}

}

printf("%d

",cnt);

return 0;

}

c语言程序设计植树,C语言程序设计100例之(19):欢乐的跳相关推荐

  1. c语言程序设计植树,C语言程序设计实验报告——实验

    C语言程序设计实验报告--实验 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  2. c语言程序设计植树,c语言程序设计报告

    c语言程序设计报告 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得收入(下 ...

  3. c语言吧百度贴吧经典100例,C语言程序设计经典100例

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 tmp+=i; printf("The sum is %d\n",tmp); getch(); } ================= ...

  4. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  5. 百度c语言贴吧 经典C源程序100例-2

    [程序2] 题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5% ...

  6. 单片机c语言程序设计实训报告,(整理)单片机C语言程序设计实训100例.doc

    (整理)单片机C语言程序设计实训100例.doc .单片机C语言程序设计实训100例基于8051Proteus仿真案例第 01 篇 基础程序设计01闪烁的LED/* 名称闪烁的LED说明LED按设定的 ...

  7. c语言程序设计 doc,C语言程序设计精彩资料100例.doc

    C语言程序设计精彩资料100例.doc 转C语言程序设计经典100例[程序1]题目有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数都是多少1.程序分析可填在百位.十位.个位的数字都是1 ...

  8. c语言程序设计理论考试,《C语言程序设计》理论试题库-程序题100例

    <<C语言程序设计>理论试题库-程序题100例>由会员分享,可在线阅读,更多相关<<C语言程序设计>理论试题库-程序题100例(59页珍藏版)>请在人人 ...

  9. c语言经典程序表白6,经典C语言程序设计100例(6)

    [程序61] 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2.程序源代码: main() ...

最新文章

  1. cookie获取java_java中如何获取cookie
  2. 第四范式陈雨强获评首届世界人工智能大会云帆奖 | 2020WAIC
  3. 消费物联网与工业物联网有何区别?
  4. irq4中断子程序c语言写法,AVR汇编程序参考
  5. hdu4405:概率dp
  6. php 上传文件工具类,PHP 图片上传工具类(支持多文件上传)
  7. 正确识别希捷Backup Plus新睿品1TB正品,杜绝奸商猖獗
  8. 用Python对全国火车站数量进行分析,发现东北三省竟然占了2成
  9. python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(6)开题答辩PPT
  10. 单片机基础知识点 01
  11. python爬虫中国土地市场网的相关数据最新2021/5/7
  12. C和C++文本读写速度对比
  13. 【LG-P5072 [Ynoi2015]】盼君勿忘
  14. [VS报错] 应用程序无法正常启动0xc000007b -- 解决措施
  15. luoguP1357 花园
  16. this java 错误_java异常错误处理
  17. 学习3D建模多久才能工作呢
  18. node.js 用typescript实现 图片,音频压缩工具
  19. NFS(网络文件系统)基于什么协议
  20. 解决Error: Could not detect Mac OS X Version from sw_vers output: '10.14.3'

热门文章

  1. [转载]你有英文名字吗?给自己起一个吧
  2. python怎样算入门_python初学者怎么入门
  3. mysql pam 配置_pam_mysql 安装配置总结 (结合vsftpd)
  4. git报错Successfully created project ‘*****’ on Gitee, but initial commit failed解决
  5. 关于使用[MASK]做完形填空时需要注意的点
  6. gstreamer基础教程13-Playback speed
  7. JavaScript-动画-轮播图
  8. java-利用反射做一个将javabean对象转为json的小工具(v1)
  9. 试商法 素数探求 c语言,连续合数探求
  10. 久别重逢,如期而归——杭州区块链国际周7月开启!