蓝桥杯打卡第十天(2.9)

0ms 2023-02-09 18:32:26

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。

小蓝的图由 2021 个结点组成,依次编号 1 至 2021。

对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。

例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。

请计算,结点 1 和结点 2021 之间的最短路径长度是多少。

提示:建议使用计算机编程解决问题。

代码:

#include<stdio.h>
int gys(int a, int b) { //最大公约数
	if (a % b == 0) return b;
	else return gys(b, a % b);
}
int gbs(int a, int b) { //最小公倍数
	return (a * b) / gys(a, b);
}
int min(int a, int b) { //判断最小值 
	return (a < b) ? a : b;
}
int main() {
	int i, j;
	int f[2022] = {0};//置零计算 
	for (i = 1; i <= 2021; i++) {//运算过程 
		for (j = i + 1; j <= i + 21 && j <= 2021; j++) {
			if (f[j] == 0) f[j] = f[i] + gbs(i, j);
			else f[j] = min(f[j], f[i] + gbs(i, j));
		}
	}
	printf("%d", f[2021]);
}

//答案:10266837 

总结:生活不在别处,当下即是全部!

...全文
16 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,341

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧