假如每个人身上都携带着正常运行的手机,而且电信运营商能采集和存储每台手机每隔一定时间的准确位置信息(位置信息存储为“9位整数的时间戳 手机用户编号 经度纬度”,比如:
134356782 100 25658827 25657689),那么在发生新冠肺炎疫情的时候,从技术层面就能做到对密接者的准确追踪。假设某个小镇有1万人,所有人的位置信息被电信运营商按小时分类集中存在某个文件里。为了方便大家计算,我们假设经度为8位数的整数、纬度也为8位数的整数,假设时间戳相差在2之内、且经度相差为3之内而且纬度也相差为3之内就视为密接者。
A、假如老张的用户编号为5,他被确诊新冠肺炎,防控办需根据电信运营商的记录文件追踪老张的密接者,以及密接者的密接者、密接者的密接者的密接者.……最后把所有密接者的位置信息“时间戳、用户手机编号、经度、纬度”输出来。
B、思考:如果是千万人口级别的大都市怎么办?
编程基础第六版 课后题
代码如下
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,t;
int a[15];
int x,l,h,mid,n;
n=15;
l=0;
h=n-1;
printf("请输入15个不同数字,按一次输入一个,依次输入15次的方法输入数字:\n");
for(i=0;i<15;i++)
scanf("%d",&a[i]);
for(j=0;j<14;j++)
{
for(i=0;i<14-j;i++) //这里我第一次写也忽略了j要不断的去替换i,所以对于i来说它的循环条件应该是14-j,有好多人可能和我一样写成i<15啦
if( a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
printf("按从大到小的排序结果:");
for( i=0;i<15;i++)
printf("%d\t",a[i]);
printf("\n");
for (l=0, h=14, printf("请输入一个数:"), scanf("%d", &x); l<=h;)//while也可以但是我很奇怪用while会提前退出循环哈哈哈
{
mid=(l+h)%2;
if (x>a[mid])h=mid-1;
else if (x<a[mid])l=mid+1;
else
{
printf("%d是第%d位数",x,mid+1);
break;
}
}
if(x!=a[mid])
printf("查无此数!");
return 0;
}
如果数据比较大,可以考虑hash表