首页 > 编程语言 >C#华为OD笔试题*3

C#华为OD笔试题*3

时间:2024-07-28 18:54:06浏览次数:18  
标签:Count arr C# OD list tokens int 华为 numM

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的

标签:Count,arr,C#,OD,list,tokens,int,华为,numM
From: https://blog.csdn.net/yannsann/article/details/140754495

相关文章

  • C语言输出函数printf详解
    printf1.1基本类型printf()的作用是将参数文本输出到屏幕。f代表format(格式化),表示可以定制输出文本的格式。printf()的头文件是stdio.h例如:#include<stdio.h>intmain(){ printf("HelloWorld"); return0;}1.2占位符printf()可以在输出文本中指定占位符......
  • Bouncy Castle集成SM2与SM3
    BouncyCastle中集成SM2和SM3的讲解: 首先,确保您已经正确地将BouncyCastle库引入到您的项目中。这通常需要在项目的构建配置中添加相应的依赖项。 SM2是非对称加密算法,在集成时: 1. 密钥生成: -使用BouncyCastle提供的特定类和方法来生成SM2的公私钥......
  • C++题解(17) 狐猬编程: 640.线段覆盖
    题目描述在一条数轴上,有N条线段,第i条线段的左端点是s[i],右端点是e[i]。如果线段有重叠(即使是端点重叠也算是重叠),则输出“impossible”,如果没有重叠则输出“possible”。输入格式输入文件名:640.in多组测试数据。第一行,一个整数G,表示有G组测试数据。1<=G<=10。每组......
  • 【代码随想录训练营第42期 Day10打卡 LeetCode 232.用栈实现队列 225. 用队列实现栈 2
    目录一、做题心得二、题目与题解题目一:232.用栈实现队列题目链接题解题目二:225.用队列实现栈题目链接题解题目三:20.有效的括号题目链接题解题目四:1047.删除字符串中的所有相邻重复项 题目链接题解三、小结一、做题心得今天是代码随想录训练营打卡的第1......
  • 在docker环境下安装dpabi
    安装过程很简单,官网写的也很明白,会写这篇是因为不太熟悉很多软件,导致安装过程出现了很多小问题。以前都是在matlab中运行dpabi,matlab安装起来很麻烦,而且安装包很大,我现在用的版本已经有20g,在换电脑的时候重新安装一遍matlab都要小半天。对于不太常用matlab的家人们来说docker......
  • Linux网络:传输层协议TCP(三)滑动窗口及流量控制
    目录一、关于滑动窗口在TCP中的应用1.1什么是滑动窗口,为什么要有滑动窗口1.2滑动窗口的实现1.3滑动窗口针对丢包重传的处理机制二、流量控制一、关于滑动窗口在TCP中的应用1.1什么是滑动窗口,为什么要有滑动窗口在上一篇博文中博主阐述了确认应答ACK策略,对每一个对......
  • Python爬虫入门01:在Chrome浏览器轻松抓包
    文章目录爬虫基本概念爬虫定义爬虫工作原理爬虫流程爬虫类型爬虫面临的挑战使用Chrome浏览器抓包查看网页HTML代码查看HTTP请求请求头(RequestHeader)服务器响应抓包的意义爬虫基本概念爬虫定义爬虫(WebCrawler或Spider)是一种自动浏览互联网的程序,它按照一定的......
  • Win11系统下Yolov8的C++编译环境实践
    Date:2024年1月24日概要说明yolo简介及背景    yolo(YouOnlyLookOnce)是目前一种普及性较高的人工智能目标检测方法,它将目标检测任务重新定义为单一的回归问题,从而实现了从图像像素到边界框坐标和类别概率的直接映射。在业界,Yolo的新应用层出不穷,其需求多样变化、源......
  • [题解]ABC364 A~F
    A-GluttonTakahashi给定\(n\)道菜,每道菜要么是甜的(用sweet表示),要么是咸的(用salty表示)。必须按顺序吃,如果连续吃到\(2\)个甜的菜,就会浑身难受吃不下去了。请问是否能吃完这些菜。按题意模拟即可,只要前\(n-1\)个元素中有连续的sweet就输出No。点击查看代码#include<bits/s......
  • BUUCTF-Include(Web)
    一、Include11.相关知识PHP://filterphp://filter是php中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。具体详见:https://blog.csdn.net......