1.人见人爱A-B

问题描述

A和B是两个集合,A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)呵呵,很简单吧?

输入说明

输入数据包含T个测试实例。

首先输入数字T,然后输入T组测试数据,每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间由一个空格隔开. 

输出说明

针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

个人总结

在记录集合B的数据时设置的数组大小太大了,导致系统运行比较慢,但是方法是正确的,ai了一下还有的方法是先查看集合中是否存在这个数据,用一个函数同意判断,然后去重,若没有则加入数组中

2.最少拦截系统

问题描述

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能达到前一发的高度。

某天,雷达捕捉到敌国的导弹来袭,如果系统数量太少,将导致有可能不能拦截所有的导弹。所以,根据雷达捕捉到的导弹高度,需要预先准备相应数量的拦截系统。

比如导弹的高度依次为:

5 3 4 2 4 1

则一个拦截系统的第一发炮弹必须打到高度5的地方,第二发炮弹打到高度3的地方。

但第三发炮弹打不到高度4的地方(因为每一发炮弹不能达到前一发的高度),所以要使用第二套拦截系统。

第二套拦截系统发射的炮弹高度打到4和2的高度(实际上,要拦截高度为2的炮弹,使用第一套拦截系统或者第二套都可以),

第三套拦截系统发射的炮弹高度打到4和1的高度(实际上,要拦截高度为1的炮弹,三套拦截系统都可以)。

因此,总共需要三套拦截系统。

再比如导弹的高度依次为:

5 3 4 2 3 1

则一个拦截系统的第一发炮弹必须打到高度5的地方,第二发炮弹打到高度3的地方。

但第三发炮弹打不到高度4的地方(因为每一发炮弹不能达到前一发的高度),所以要使用第二套拦截系统。

第二套拦截系统发射的炮弹高度打到4的高度。

再要拦截高度为2的炮弹,使用第一套拦截系统或者第二套都可以,但考虑到后面还需要拦截炮弹,我们这里使用第一套拦截系统(为什么不能用第二套,自己想啦)。

再要拦截高度为3的炮弹,我们使用第二套拦截系统。

再拦截高度为1的炮弹,第一套和第二套系统都可以,我们就使用第二套吧。

因此,总共仅需要两套拦截系统,第一套拦截的是5 3 2,第二套拦截的是4 3 1。

请根据给定的高度数据,帮助计算一下最少需要多少套拦截系统。

输入说明

输入数据首先包括一个整数T (1<=T<= 100),,表示测试数据的组数。

每组测试数据的第一行是一个整数N(1<= N <= 1000),代表着导弹总个数(正整数), 接下来用N个数字代表着导弹依次飞来的高度,其中雷达给出的高度数据是不大于10000的正整数,用空格分隔。

输出说明

对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统。

每组输出占一行,行首与行尾无空格。

个人总结

不知道该怎么寻找最好的拦截组合,参考了之后,利用二分法先找能拦截h以及最后高度最小的,利用贪心策略尽可能让每套系统拦截更多的导弹,所以可以先对当先的h,找系统中最后拦截的高度大于等于h的且最小,找到了即更新该系统最后拦截高度为h,没找到则新增一套系统来拦截当前导弹

3.求N!

问题描述

给你一个整数N(0 ≤ N ≤ 10000),你的任务是计算并输出 N!

输入说明

输入多行,每行一个N。

输出说明

对于每个输入N,在一行中输出N!

行首与行尾为空格,两组输出之间无空行。

个人总结

注意到题目举例的100!,如果直接输出,结果是会溢出的,所以可以采用数组来存储每位数字,相当于模拟手算乘法,一开始先记录num[0]=1,位长len=1,然后循环计算i由2乘到N,记录进位位为0,内层循环j由0到len,即结果=每位数都与i相乘再加上进位,当j=0时,num[0]保留的是计算结果的个位数,进位=计算结果/10,当进位大于0,循环存进位的数的大小,最后循环倒着输出即可

4.素数表

问题描述

从键盘输入m,n

在屏幕上按每行10个的格式输出m~n之间的全部素数。

请用函数判断一个数是否素数。

输入说明

两个整数m n

输出说明

[m,n]之间(包含m和n)的素数,每行10个,每个数后跟一个空格。

个人总结

1不是素数

5.倒数数列

问题描述

编写程序计算并输出

s=sumk=1n (1/k) = 1+1/2+1/3+............+1/n 的值。

要求定义并调用函数total(n)计算1+1/2+1/3+......+1/n

注意:此题的main函数如下所示:

int main(){

 int n;

 scanf("%d",&n);

 printf("%.3f\n",total(n));

 return 0;

}

或者:

int main(){

 int n;

 cin>>n;

 cout<<fixed<<setprecision(3)<<total(n)<<endl;

 return 0;

}

输入说明

正整数n,表示前n项求和

输出说明

s,表示前n项的和

首尾无空格

个人总结

在total函数中写一个循环函数计算即可

6.排列数

问题描述

编写程序计算排列数

Pmn =m! / (m-n)!

要求定义函数fact(n)计算n的阶乘。

main函数中可使用如下形式调用:fact(m)/fact(m-n));

输入说明

两个数m、n

输出说明

Pmn

个人总结

double是lf,long long是lld

7.亲和数

问题描述

古希腊数学家毕达哥拉斯在自然数研究中发现,

220的所有真约数(即不是自身的约数)之和为: 

1+2+4+5+10+11+20+22+44+55+110=284。 

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。

人们对这样的数感到很惊奇,并称之为亲和数。

一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。 

你的任务就编写一个程序,判断给定的两个数是否是亲和数。

请定义一个函数,传入一个数n,返回n的所有真约数之和。

输入说明

输入数据第一行包含一个数M,接下来有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 

输出说明

对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。

个人总结

利用循环先判断x的真约数,再相加即可求出结果

在普适计算中,物联网(IoT)提供了一个由传感器或无线电连接设备构成的网络,这些设备可以在信息物理空间中被唯一标识和定位。这个物联网主要以无线方式连接,形成一个由射频标签、低成本传感器或电子标签组成的自配置网络。"物联网"一词将RFID技术与当今基于IPv6的互联网技术相结合。所有物品(物体)都拥有IP地址,可以被唯一识别。这些可被IP识别的物体,借助RFID、Wi-Fi、 ZigBee、移动网络和GPS等技术,能够通过互联网被读取、识别、定位、寻址和/或控制。

许多技术可用于构建物联网基础设施以及针对特定应用领域的物联网系统。支撑技术分为两类。赋能技术构建了物联网的基础。在赋能技术中,跟踪(RFID)、传感器网络和全球定位系统(GPS)至关重要。

RFID技术通过电子标签或RFID标签应用于任何被监控或跟踪的物体上。这些标签可以附着在任何物体上,例如商品、工具、智能手机、计算机、动物或人身上。其目的是利用无线电波或传感信号来识别和跟踪这些物体。有些标签可以通过无线读写器在几十米或几百米外被读取。大多数RFID标签至少包含两个主要部分。一个是集成电路,用于存储和处理信息、调制和解调射频(RF)信号以及执行其他特殊功能。另一个部分是天线,用于接收和发射无线电信号。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐