MOOC_判断两个城市的距离
2018-05-23 01:40:33 0 举报
解题
作者其他创作
大纲/内容
998
值
ArrayList遍历是:for i=0 get(i)for eachiterator
1
4
nanjing
701
引自博客园博主—CarpenterLee点我看原链
第一轮
jinan beijing shanghai
Hugzou
C
citys.size()等于输入的城市数量.
8
666
Scanner in = new Scanner(System.in);String inputMatrix;int n = citys.size();int numOfCitys = n*n; for(int i=0;in;i++){ for(int j=0;jn;j++){ twoCitysGroup[i][j]=in.next() } }
11
int n = citys.size();\t\tint numOfCitys = n*n;\t\t\t\t//STEP 2 : 获取矩阵数字\t\tArrayList matrixNumber = new ArrayList();\t\tint count = 0;\t\twhile(go) {\t\t\tmatrixNumber.add(in.nextInt());\t\t\tcount++;\t\t\tif(count == numOfCitys) {\t\t\t\tbreak;\t\t\t}\t\t}
708
0
16
二维数组
9
Scanner in = new Scanner(System.in);ArrayList citys = new ArrayList();boolean go = true;while(go){ citys.add(in.next()); if(in.next().equals(\"###\")){ break; }}
Jigxng
当循环遍历matrix,使其对应的距离为0的城市对应起来citys[i]==twoCitys[0]orcitys[i]==twoCitys[1]这时要注意左边i的值,要取小的i,这样这个城市下标位置才是按从左到右来排列的.方便其后计算.
jinan
qingdao
800
1108
333
9
键
B
可以看到HashSet类中的构造器内部是创建了一个HashMap的实例
存放不定个数城市名的ArrayList容器对象citys
注意:任何两个城市之间的里程都已经给出,不需要计算经第三地中转。注意:你并不需要去录入上图的数据,数据是在程序输入中给的。输入格式:首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。然后,你会读到nxn的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。最后,你会读到两个城市的名字。输出格式:输出这两个城市之间的距离。输入样例:Hagzou\tHugzou\tJigxng ###0\t1108\t7081108\t0\t994708\t994\t0Hagzou Jigxng输出样例:708
int distance =in.nextInt();
133
0
3319
矩阵数组
城市矩阵数字录入
D
ArrayList
1430
7
4
132
2
所有的城市名称(顺序)
500
3
需要将每一个与每另一个形成数组
String[][]
994
805
shanghai
1973
6
存放两个城市名字的数组对象twoCitys
2656
当B位置为0时(),C的位置在下标6,也就是在(citys下标+cityNumbers)中而B下标在citys中是1,但那时距离不是0也就是说,只有当citys下标是0是城市距离本身是0其它的都在其citys下标与左侧对称位置之和.即[citys下标+(citys下标*4)]0也适合这个公式.
2
A
beijing
int n = cityNumbers
用合适方式将城市名和矩阵数字以键值对存储到Map中.
最后会读到两个城市的名字这两个城市的名字在之前若干城市名字包含最终要输出该两座城市之间的距离
15
假设有个int数组int[]
14
di
10
342
V
String[][] twoCitysGroup = new String[n][n];twoCitysGroup[i][j] =
6
从自习到现在做这个题还没停下...好几个小时速度有点慢啊
//STEP 1 : 用基础方法去模拟方法实现\t\tScanner in = new Scanner(System.in);\t\tTreeSet citys = new TreeSet();\t\tboolean go = true;\t\twhile(go) {\t\t\tcitys.add(in.next());\t\t\tif(in.next().equals(\"###\")) {\t\t\t\tbreak;\t\t\t}\t\t}
A
1
ArrayList的可以使用:for i=0 get(i)for eachiterator进行遍历
//距离矩阵 使用二维数组\t int[][] matrix = new int[n][n];
将twoCitysGroup矩阵分别依次传入数字.
citys为城市名城的ArrayList
公交车上很常见的站点信息
4座城
之后程序还会接受两个城市的名字(String).然后要计算这两个城市的距离
大佬的解题——分析之
7
第二轮
5
300
12
int allN = n*n; //所有矩阵的数字有这么多个int distance = 0; //距离int变量while(allN !=0){ distance = in.nextInt(); allN--; for(int i=0;in;i++){ for(int j=0;jn;j++){ matrix[i][j]=distance; } } }
最后就差一个将twoCitys与citys做比较判断之后遍历matrix的一个过程了
键此时将两个城市
matrix
下标i+1
for i=0 get(i)for eachiterator
import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class Main {\tpublic static void main(String[] args) {\t\tMain m = new Main();\t\tScanner in = new Scanner(System.in);\t\tArrayList citys = new ArrayList();\t\tboolean go = true;\t\tString oneOfcity;\t\tString stopSymbol = \"###\
for(int i=0;in;i++){ for(int j=0;jn;j++){ citysArray[i][j]= }}
最后的两个城市的值都会进行判断
所有的矩阵数字(顺序)
Scanner in3 = new Scanner(System.in);\t\tString[] twoCitys = new String[2];\t\t//最后需要的两个城市分别在字符数组twoCitys的下标0和1上.\t\ttwoCitys[0] = in3.next();\t\ttwoCitys[1] = in3.next();
K
嵌套for
整数矩阵 nxn
10
8
此方法一共获得n*n组的新字符串hashOneTwo. n为citys城市数量新字符串也是唯一的.用这个新字符串用作key.
String[][] twoCitysGroup = new String[n][n];
Hagzou
for(int j=0;j2;j++){ for(int i=0;icitys.size();i++){ if(citys.get(i).equals(twoCitys[j])){ } }}
3
11
2500
5
假设:map.get(arrays[shanghai][jinan])会获取 666 的吧
正常的录入城市名,放入ArrayList中
public class seekDistance { public static void main(String[] args) { ArrayList cityName = new ArrayList();//存放城市名 Scanner in = new Scanner(System.in) ; //Step1:输入有效性判断 String name = in.next(); while(!(name.equals(\"###\
声明numOfCitys为矩阵大小用ArrayList存放矩阵数字名为matrixNumber当添加到指定个数后break跳出while go
A城到D城的距离
红线为本城的0的位置
12
HashSet是对HashMap的简单包装,对HashSet的函数调用都会转换成合适的HashMap方法
城市距离矩阵录入A
第三轮
用HashMap及更短的代码实现
3座城
citys
首先最终的两个城市需要逐个确定位置.例如是城市B 城市C城市B在citys下标是1,C下标是2而结果是300 距离也就是说,确定其中一个citys数值是0的时候,再查看另一个城市位置上的数字是多少,
城市数量
13
现已知已通过的条件如下
567
顺序的矩阵数字对应顺序的数组城市
俩城市名称矩阵录入
3000
C城到A城的距离
存放输入的城市数量*城市数量的矩阵int数组对象 matrix
结果验证
package mooc_java进阶_d3周题;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class Main4 {\tpublic static void main(String[] args) {\t\tMain4 m = new Main4();\t\t// STEP 1 : 用基础方法去模拟方法实现\t\tScanner in = new Scanner(System.in);\t\tArrayList citys = new ArrayList();\t\tboolean go = true;\t\tString oneOfcity;\t\tString stopSymbol = \"###\
package mooc_java进阶_d3周题;import java.util.ArrayList;import java.util.Scanner;public class Main {\tpublic static void main(String[] args) {\t\tScanner in = new Scanner(System.in);\t\tString stopSymbol = \"###\";\t\tint cityNumbers = 0;\t\tboolean goOn = true;\t\tArrayList citys = new ArrayList();\t\twhile (goOn) {\t\t\tString cityOnly = in.next();\t\t\tif (cityOnly.equals(stopSymbol)) {\t\t\t\tbreak;\t\t\t} else {\t\t\t\tcitys.add(cityOnly);\t\t\t}\t\t}\t\tcityNumbers = citys.size();\t\tint n = cityNumbers;\t\tScanner in1 = new Scanner(System.in);\t\tint allN = n * n;\t\tint[] matrix = new int[allN];\t\tfor (int i = 0; i matrix.length; i++) {\t\t\tmatrix[i] = in1.nextInt();\t\t}\t\tScanner in3 = new Scanner(System.in);\t\tString[] twoCitys = new String[2];\t\ttwoCitys[0] = in3.next();\t\ttwoCitys[1] = in3.next();\t\tint count = 0;\t\tint firstCityIndex = 0;\t\tint secondCityIndex = 0;\t\tfor (int j = 0; j 2; j++) {\t\t\tfor (int i = 0; i n; i++) {\t\t\t\tif (citys.get(i).equals(twoCitys[j])) {\t\t\t\t\tcount++;\t\t\t\t\tif (count == 1) {\t\t\t\t\t\tfirstCityIndex = i;\t\t\t\t\t} else if (count == 2) {\t\t\t\t\t\tsecondCityIndex = i;\t\t\t\t\t} else {\t\t\t\t\t}\t\t\t\t}\t\t\t}\t\t}\t\tint leftCityIndex = 0;\t\tint rightCityIndex = 0;\t\tint city_D_value = 0;\t\tint li;\t\tint liInMat;\t\tif (firstCityIndex secondCityIndex) {\t\t\tleftCityIndex = secondCityIndex;\t\t\tli = leftCityIndex;\t\t\tliInMat = li * n + li;\t\t\tcity_D_value = firstCityIndex - secondCityIndex;\t\t\trightCityIndex = liInMat + city_D_value;\t\t} else {\t\t}\t\tint distance = matrix[rightCityIndex];\t\tif (distance != 0) {\t\t\tSystem.out.print(distance);\t\t} else {\t\t\tSystem.out.println(\"0\");\t\t}\t\tin.close();\t}}
17
13
14
本机测试ok提交用例通不过...(lll¬ω¬)
15
Hagzou\tHugzou\tJigxng0 1108 7081108 0 994708 994 0
Hagzou距离Hugzou 1108 距离Jigxng 708
TreeSet遍历是:for eachiterator
package mooc_java进阶_d3周题;import java.util.ArrayList;import java.util.Scanner;/** * 两座城市之间的距离 * * @author SeeClanUkyo * */public class Main {\tpublic static void main(String[] args) {\t\tScanner in = new Scanner(System.in);\t\tString stopSymbol = \"###\
加入现在城市有3个即n为3
欢迎来我的网站及博客查看更多解题脑图!!!逐渐学习优化中!!!
for循环输出测试OK
0 条评论
下一页