博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动距离——第六届蓝桥杯C语言B组(省赛)第八题
阅读量:6250 次
发布时间:2019-06-22

本文共 1493 字,大约阅读时间需要 4 分钟。

原创 


问题描述:

移动距离

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...

当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:

1 2 3 4 5 6

12 11 10 9 8 7
13 14 15 .....

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数w m n,空格分开,都在1到10000范围内

w为排号宽度,m,n为待计算的楼号。
要求输出一个整数,表示m n 两楼间最短移动距离。 

例如:

用户输入:
6 8 2
则,程序应该输出:
4

再例如:

用户输入:
4 7 20
则,程序应该输出:
5

资源约定:

峰值内存消耗 < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0

注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

解题思路:

此题较简单,最短路径很容找,两个数的(行差+列差)就是最短路径了。

代码:

1 #include
2 #include
3 #include
4 5 int main() 6 { 7 int w,m,n; 8 scanf("%d%d%d",&w,&m,&n); 9 int a=m>n?m:n; //求出两数中较大者,用于创建数组 10 11 int row; //行数 12 if(a%w!=0) //求出数组行数 13 row=a/w+1;14 else15 row=a/w;16 17 int **arr=(int **)malloc(sizeof(int *)*row); //创建数组 18 int i;19 for(i=0;i<=row-1;i++)20 arr[i]=(int *)malloc(sizeof(int)*w);21 22 int j; 23 int k=0;24 for(i=0;i<=row-1;i++) //数组赋值 25 { 26 if(i%2==0) //偶数行,从左到右赋值 27 for(j=0;j<=w-1;j++)28 arr[i][j]=++k;29 if(i%2==1) //奇数行,从右到左赋值 30 for(j=w-1;j>=0;j--)31 arr[i][j]=++k;32 } 33 34 int b=m

2018-03-19

转载于:https://www.cnblogs.com/chiweiming/p/8601328.html

你可能感兴趣的文章
Scrum 学习笔记
查看>>
Ext.form.ComboBox常用属性详解
查看>>
HTTP Header 详解
查看>>
Java中的HashMap 浅析
查看>>
调和映射的Bochner公式
查看>>
windows批处理
查看>>
网页上的摄影展:等高响应布局实现
查看>>
IE无法打开internet网站已终止操作的解决的方法
查看>>
Plus One leetcode java
查看>>
FineUI(专业版)公测版发布(这速度,真TM快!)
查看>>
boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。...
查看>>
LINQ To SQL 语法及实例大全
查看>>
sqlserver锁机制详解(sqlserver查看锁)
查看>>
strut2的原理
查看>>
记一次串口通信调试,慎用SerialPort.Close
查看>>
Struts2自己定义拦截器实例—登陆权限验证
查看>>
windows 下FFMPEG的编译方法 附2012-9-19发布的FFMPEG编译好的SDK下载
查看>>
Java检查型异常和非检查型异常
查看>>
Android中如何像 360 一样优雅的杀死后台服务而不启动
查看>>
不管多少个空格替换为一个空格
查看>>