C#华为OD笔试题*3

C#华为OD笔试题*3

背景

参加了一下华为OD笔试,共三道题特此记录一下前两道都对了,第三道还在研究之后更新。

代码

题目1

   轮转寿司店办活动,假设5盘寿司价格分别为3 14 15 6 5,买其中一盘寿司则赠送下一盘价格小于他的寿司,最低价格不赠送,比如买14价格的寿司 赠送6元的 买5元的赠送3元的,请输出实际商品价值。比如3 14 15 6 5,最终输出为3 20 18 9 8

        public static void Main(string[] args)
        {
            string line;
            while ((line = System.Console.ReadLine()) != null)
            { // 注意 while 处理多个 case
                string[] tokens = line.Split(' ');
                if (tokens.Length != 0)
                {
                    if (tokens.Length == 1)
                        Console.WriteLine(tokens[0]);
                    else
                    {
                        int[] inputArr = tokens.AsEnumerable().Select(o => Convert.ToInt32(o)).ToArray<int>();
                        int[] resArr = GetTotalPrice(inputArr);
                        Console.WriteLine(string.Join(" ", resArr));
                    }
                }
            }
            Console.ReadKey();
        }

        static int[] GetTotalPrice(int[] arr)
        {
            int[] newArr = new int[arr.Length];
            //3 14 15 6 5
            //3 20 18 9 8
            for (int i = 0; i < arr.Length; i++)
            {
                int tmp = 0;
                for (int j = i + 1; j < arr.Length; j++)
                {
                    if (arr[j] < arr[i])
                    {
                        tmp = arr[j];
                        break;
                    }
                }
                if (tmp == 0 && i > 0)
                {
                    for (int j = 0; j < i - 1; j++)
                    {
                        if (arr[j] < arr[i])
                        {
                            tmp = arr[j];
                            break;
                        }
                    }
                }
                newArr[i] = tmp + arr[i];
            }
            return newArr;
        }

题目2

        输入
        5 4
        1
        1
        2
        3
        5
        1 2 3
        1 4
        3 4 5
        2 3 4
        5测试用例权重 4组测试用例
        相同权重按顺序 按序号排序
        1 2 3 权重4
        1 4 权重 4
        3 4 5 权重 10
        2 3 4 权重 6
        输出 3 4 1 2

        static int numM = 0;
        static int numN = 0;
        static int[] arrM;
        static int[] arrN;
        static int rowCount = 0;
        public static void Main()
        {
            //m n m times spe n times data
            List<int[]> list = new List<int[]>();
            string line;
            while (!string.IsNullOrEmpty(line = System.Console.ReadLine()))
            { // 注意 while 处理多个 case
                string[] tokens = line.Split(' ');
                if (list.Count == 0 && tokens.Length == 2)
                {
                    numM = Convert.ToInt32(tokens[0].Trim());
                    numN = Convert.ToInt32(tokens[1].Trim());
                    rowCount = numM + numN + 1;
                    arrM = new int[numM];
                    arrN = new int[numN];
                    list.Add(new int[] { numM, numN });
                }
                else if (list.Count <= rowCount)
                {
                    if (list.Count >= 1 && list.Count < numM + 1)
                    {
                        list.Add(new int[] { Convert.ToInt32(tokens[0]) });
                        arrM[list.Count - 1 - 1] = Convert.ToInt32(tokens[0]);
                    }
                    else
                    if (list.Count >= numM + 1 && list.Count <= rowCount - 1)
                    {
                        list.Add(tokens.AsEnumerable().Select(o => Convert.ToInt32(o)).ToArray());
                        int valueN = tokens.AsEnumerable().Select(o => arrM[Convert.ToInt32(o) - 1]).Sum();
                        arrN[list.Count - numM - 1 - 1] = valueN;
                        if (list.Count == rowCount)
                        {
                            int[] newArr = arrN.AsEnumerable().OrderByDescending(o => o).ToArray();
                            List<int> arrIndex = new List<int>();
                            for (int i = 0; i < numN; i++)
                            {
                                for (int j = 0; j < numN; j++)
                                {
                                    if (!arrIndex.Contains(j) && arrN[j] == newArr[i])
                                        arrIndex.Add(j);
                                    else
                                        continue;
                                }
                            }
                            foreach(var item in arrIndex)
                                Console.WriteLine(item+1);
                            list.Clear();
                            rowCount = 0;
                            arrM = null;
                            arrN = null;
                            numM = 0;
                            numN = 0;
                        }
                    }
                }
            }
            Console.ReadKey();
        }

题目3

        /**
         * 返回通过指定路口之间的最短时间
         * @param lights int整型二维数组 n*m 个街口每个交通灯的周期,值范围[0,120],n和m的范围为[1,9]
         * @param timePerRoad int整型 相邻两个街口之间街道的通过时间,范围为[0,600]
         * @param rowStart int整型 起点的行号
         * @param colStart int整型 起点的列号
         * @param rowEnd int整型 终点的行号
         * @param colEnd int整型 终点的列号
         * @return int整型
         */

实现算法,这个应该是最小路径。菜,没答上来。

研究明白再回来更。

        public int calcTime(int[][] lights, int timePerRoad, int rowStart, int colStart, int rowEnd, int colEnd)
        {
            // write code here
            int m = lights[0].Length;
            int n = lights.Count();
            // 0 0 2 2
            int num1 = rowEnd - rowStart;
            int num2 = colEnd - colStart;
            //youzhuan 0 zuozhuan 5
            int rowTurn = 0;
            if (num1 >= 0 && num2 >= 0)
                rowTurn = 5 * 1 + 0 * 2;
            if (num1 <= 0 && num2 <= 0)
                rowTurn = 2 * 5 + 0;
            if (num1 <= 0 && num2 >= 0)
                rowTurn = 2 * 5 + 0;
            int res = (num1 + num2) * timePerRoad + rowTurn;
            return res;
        }

百战不灭。。。总能拿到offer的

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2023年是一个非常重要的时间节点,因为那时候华为公司计划推出全新的ODC产品。ODC全称为Optical Distribution Frame,即光分配框架,是一种光纤光缆布线设备。在大型数据中心中,ODC是非常重要的一个环节,它可以实现光缆引入、连接和分配。ODC通常会被部署在数据中心的机房里,用于实现服务器、存储系统和网络设备之间的光纤连接。 华为作为中国著名的通信设备制造商,已经在ODC领域有着很强的研发基础和实践经验。在过去的几年中,除了在传统的电信设备制造领域中不断发展和壮大,华为还在数据中心领域进行了大量的技术投入。从2016年开始,华为就开始积极推出自己的ODC产品,受到了全球客户的青睐。 华为2023年推出的新一代ODC产品,一定会集成更多的先进技术,提供更高效、可靠、安全的数据中心光纤布线解决方案,将为全球的客户带来更好的使用体验。我们可以等待华为公司的官方消息,了解更多新品的规格、特性以及发布日期,期待华为ODC领域取得更大的进展和贡献。 ### 回答2: 据华为公司公布的消息,2023年将会推出华为ODC(全称华为Open Distributed Cloud)平台,这一平台的意义是令企业能够简单地将计算资源转移到网络上。 该平台作为一个全球性的透明网络,可以使得企业轻松地管理分布在不同地区、不同运营商的计算资源。传统的基础设施建设由于规模较大、投资过高难以承担,华为ODC可以为企业提供经济、灵活、安全、可靠的虚拟化资源,不断提升企业信息化、数字化与运营效率。 华为ODC平台的优势在于普遍适用的开放性,这将使得企业在进行数字化转型过程中不必迎合某一特定厂商的平台与产品,避免由此带来的限制、依赖及技术门槛等问题,从而更好地达到自身的业务目标和资产管理目标。 此外,华为ODC平台也注重生态建设,打造生态环境来满足企业的应用需求,通过共用和匹配技术,华为ODC平台助力企业加速数字化转型,提高服务效率,降低成本,加强业务和数据的安全。 在诸多企业数字化转型的背景下,华为ODC平台的推出无疑是一大利好。相信随着该平台的不断完善和推广,将会进一步提升企业数字化转型的效率和成果,带来更加广阔的发展空间。 ### 回答3: 作为一名AI语言模型,我将尽我所能展现我对华为ODC的了解和看法。 首先,2023年已经到来,华为ODC计划的实施已经开始了。ODC代表Open Data Center,是华为公司推出的一项重要计划。ODC的目的是将华为现有的IT和云服务整合到一起,以构建更加开放和智能的数据中心。ODC计划旨在改变传统数据中心的构建方式,并推出一种全新的、开放的、可扩展的数据中心架构。 华为ODC计划包括三个关键阶段。第一阶段是“迁移和改造”,旨在将华为现有的数据中心转移到更加开放、灵活和节能的ODC下。第二阶段是“创新”阶段,旨在推出更多的ODC解决方案和应用。第三阶段是“生态”阶段,旨在建立ODC生态系统,以促进ODC的普及和发展。 华为ODC计划的实施,对于华为公司来说是一个重要的里程碑。ODC计划的实现,将使华为能够更好地满足客户需求,提高产品竞争力,加速数字化转型。此外,ODC计划将大大降低能源消耗和运维成本,推动绿色可持续发展。华为ODC计划的实施,将会对全球数据中心行业产生广泛的影响。 虽然初期将会出现一些技术实现的问题,比如部署的难度和复杂性,但这一计划总体上是有前途的。我相信随着技术的不断发展,华为ODC计划将会成为一个领先的技术平台,为下一代数据中心的建设和应用奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值