有8个人组成一个朋友圈,其中各人对朋友有一个初始评分,分值越高说明该朋友在其心目中越重要。初始评分表如下(每行代表各人对其他人的评分):见图片
经过一段时间,各人对其中部分朋友的评分发生了改变。
赵:周4----周1,郑0---郑3
孙:李1---李5
吴:孙2---孙5,王6---王1
郑:李1---李3,吴2---吴6
王:吴3---吴1
===========================================================================
用所学数据结构实现如上朋友圈;
(1),用初始表初始化朋友圈;
(2),用所给数据更新朋友圈;
(3),当从键盘输入某人的汉语拼音时,按照其朋友的重要性(数值从小到大)打印其朋友圈(可以是汉语,也可以是汉语拼音)。
这道题可以使用邻接矩阵来实现朋友圈,并使用字典来将人名与邻接矩阵中的下标对应起来。下面是Python的实现代码:
python
Copy code
# 初始化邻接矩阵
graph = [
[0, 5, 3, 4, 0, 0, 0, 0],
[5, 0, 2, 0, 0, 0, 0, 4],
[3, 2, 0, 0, 4, 0, 0, 0],
[4, 0, 0, 0, 0, 0, 0, 2],
[0, 0, 4, 0, 0, 3, 0, 0],
[0, 0, 0, 0, 3, 0, 6, 0],
[0, 0, 0, 0, 0, 6, 0, 1],
[0, 4, 0, 2, 0, 0, 1, 0]
]
# 人名与邻接矩阵下标的映射字典
name_dict = {
"赵": 0,
"钱": 1,
"孙": 2,
"李": 3,
"周": 4,
"吴": 5,
"郑": 6,
"王": 7
}
# 更新朋友圈
graph[name_dict["赵"]][name_dict["周"]] = 1
graph[name_dict["赵"]][name_dict["郑"]] = 3
graph[name_dict["孙"]][name_dict["李"]] = 5
graph[name_dict["吴"]][name_dict["孙"]] = 5
graph[name_dict["吴"]][name_dict["王"]] = 1
graph[name_dict["郑"]][name_dict["李"]] = 3
graph[name_dict["郑"]][name_dict["吴"]] = 6
# 打印某人的朋友圈
person = input("请输入某人的汉语拼音:")
if person not in name_dict:
print("无此人")
else:
index = name_dict[person]
friends = []
for i, score in enumerate(graph[index]):
if score > 0:
friends.append((score, i))
friends.sort()
print(person + "的朋友圈:")
for score, i in friends:
print(list(name_dict.keys())[list(name_dict.values()).index(i)], end=" ")
print("(" + str(score) + ")", end=" ")
print()
代码中,我们首先使用一个8x8的邻接矩阵来表示朋友圈,其中每个元素表示两个人之间的关系,0表示不认识,大于0的整数表示关系的紧密程度。然后,我们使用一个字典将人名与邻接矩阵中的下标对应起来。接着,我们根据题目给出的数据更新邻接矩阵。最后输入人名获取数据
定义一个一维字符串数组,表示所有人的姓
定义一个二维数组,表示所有人的评分
编程基础第六版 课后题
代码如下
#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;
}