逐至 2021-05-23 09:04 采纳率: 100%
浏览 78
已结题

c#编程题,这个难度普通,进链接或扫描看文本,会的留下代码带注释,感谢

链接: https://pan.baidu.com/s/19Vwl_t3CjFw3T1MwhD7fxQ

提取码: 4dmv

 

  • 写回答

2条回答 默认 最新

  • Go 旅城通票 2021-05-23 17:04
    关注

     

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.IO;
    using System.Text.RegularExpressions;
    using static System.Math;
    using System.Linq;
    namespace ConsoleApp1
    {
        public class City
        {
            public string city_ascii { get; set; }
            public string city_lowercase { get; set; }
            public double lat { get; set; }
            public double lng { get; set; }
            public double population { get; set; }
            public double distance { get; set; }
    
        }
        class Geo
        {
            const double RADIUS = 6378.16;
    
            public static double radians(double x) => x * PI / 180;
    
            public static double distance(double lat1, double long1, double lat2, double long2)
            {
                double dlat = radians(lat2 - lat1);
                double dlong = radians(long2 - long1);
    
                double a = Sin(dlat / 2) * Sin(dlat / 2) +
                           Cos(radians(lat1)) * Cos(radians(lat2)) * (Sin(dlong / 2) * Sin(dlong / 2));
                double angle = 2 * Atan2(Sqrt(a), Sqrt(1 - a));
                return angle * RADIUS;
            }
        }
    
        class Program
        {
            static void Main(string[] cmd)
            {
                var citys = File.ReadAllText("worldcities.csv", Encoding.UTF8).Split('\n').Skip(1);
                List<City> list = new List<City>();
                foreach (var r in citys)
                {
                    if (r.Trim() == "") continue;
                    Match m = Regex.Match(r, "\"([^\"]+)\",\"([^\"]+)\",(-?\\d+(\\.\\d+))?,(-?\\d+(\\.\\d+)?)((,\"[^\"]*\"){5}),(\\d*(\\.\\d+)?),(\\d+)", RegexOptions.Compiled);
                    list.Add(new City
                    {
                        city_ascii = m.Groups[2].Value,
                        city_lowercase = m.Groups[2].Value.ToLower(),
                        lat = double.Parse(m.Groups[3].Value),
                        lng = double.Parse(m.Groups[5].Value),
                        population = m.Groups[9].Value == "" ? 0 : double.Parse(m.Groups[9].Value)
                    });
                }
                //var cmd = Console.ReadLine().Split(' ');
                cmd[0] = cmd[0].ToLower();
                var item = list.Where(i => i.city_lowercase == cmd[0]).FirstOrDefault();
                var value = double.Parse(cmd[2]);
                if (cmd[1] == "pop")
                {
                    var rs = list.Where(i => i.population >= value && i.city_lowercase != cmd[0]);
                    foreach (var r in rs)
                    {
                        r.distance = Geo.distance(r.lat, r.lng, item.lat, item.lng);
                    }
                    Console.Write(String.Join("\n", rs.OrderBy(i => i.distance).Take(10).Select(i => i.city_ascii + ": pop = " + i.population.ToString("n0") + " / " + Math.Round(i.distance) + " km")));
                }
                else
                {
                    foreach (var r in list)
                    {
                        r.distance = Geo.distance(r.lat, r.lng, item.lat, item.lng);
                    }
                    Console.Write(String.Join("\n", list.Where(i=>i.distance<= value&&i.city_lowercase!=cmd[0]).OrderByDescending(i => i.population).Take(10).Select(i => i.city_ascii + ": pop = " + i.population.ToString("n0") + " / " + Math.Round(i.distance) + " km")));
                }
    
            }
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答