热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2012年华为编程大赛算法实现

#第一题就餐问题defcheck_lunch(num,time,input):foriinrange(num):if((i+1)%time!0andinput[i]!(i+1

#第一题就餐问题
def check_lunch(num, time, input):
    for i in range(num):
        if ((i + 1) % time != 0 and input[i] != (i + 1) % time):
            input[i] = 0
        elif ((i + 1) % time == 0 and input[i] != time):
            input[i] = 0;
    return input
num = 11;
#第二题输入联想
def auto_complete(str, tmp):
    arr = str.split(‘ ‘)
    n = len(tmp)
    m = len(arr)
    count = [0, 0]
    maxIndex = 0
    output = []
    err =0
    for i in range(n):
        for j in range(m):
            if (tmp[i] == arr[j][i]): count[j] += 1
    #print(err)
    maxNum = max(count)
    for i in range(m):
        if(tmp[0] != arr[i][0]): err +=1
        if(err == 2):return ""
        if(count[i] == maxNum):
            output.append(arr[i]+" ")
    return output;
def findStr(pattern,str):
     lenStr = len(str)
     lenPat = len(pattern)
     i=0
     j=0
     start = -1
     step = 0
     while(i         if(str[i] != pattern[j]):
             i = i+1
             j = 0
             step =0
         else:
             i = i+1
             j = j+1
             step = step+1
             if(step == lenPat):
                 return i-step,i
     return -1,0
pats=[["if","then"],
          ["switch","case","end"],
          ["do","while"]]
def analysize2(str):#第三题语法分析
    lenStr = len(str)
    lenPat = len(pats)
    i =0;
    count = 0
    results = []
    while(i        for j in range(0,lenPat):
            result = findPat(pats[j],str)
            if(result[0]>0):
                results.append(result)
        if(results ==[]):break
        minItem=(0,lenStr,0)
        for item in results:
            if(item[1]                minItem = item
        if(minItem[0]==0 or minItem[2]>=lenStr):
            break
        count += minItem[0]
        start = minItem[2] +1
        str = str[start:]
        i += minItem[2] +1
        results.clear()
    return count
def findPat(pattern,str):
    str0 = str
    lenP = len(pattern)
    lenStr = len(str)
    k ,count= 0,0
    i=0;j=0
    start =0
    end = 0
    while(k        i1,j1=findStr(pattern[k],str)
        if(i1!=-1):
            #start.append(i1+j)
            start = i1 +j
            i=j+i1
            j=j+j1
            k=k+1
            str = str0[j:]
            m,n=findStr(pattern[k],str)
            if(m!=-1):
                k=k+1
                i,j = j+m,j+n
                str = str0[j:]
                if(k==lenP):
                    count =count+1;
                    end=j-1
                    #k = 0
        else:
            break
    return count,start,end;
str = "switch if sdfas then case then if adb switch case then"
print(check_lunch(11,3,[1,2,3,3,1,3,1,1,1,1,2,3]))
print(check_lunch(11,4,[1,2,3,4,2,3,3,4,1,2,3]))
print(auto_complete("chengdu chongqing","c"))
print(auto_complete("chengdu chongqing","che"))
print(auto_complete("chengdu chongqing","jing"))
print(analysize2("if then"))
print(analysize2("switch case aaa"))
print(analysize2("if (aaa) then do bbb while switch cas"))

1. 就餐抽查(30分) 

 问题描述:  

某公司由于人多,午餐分为多批次就餐,严格要求每批次就餐时间。并定期抽查就餐情况。请编写程序实现就餐抽查情况。 

 

要求实现函数:  

void check_lunch(int num, int time,int input[], int output[]) 

【输入】  int num,就餐总人数           int time,就餐分批数           char input[],就餐情况 【输出】  char output[] 违规就餐情况 【返回】   

注:对就餐分3批的情况,12人就餐,正确的就餐情况应如下分布[1,2,3,1,2,3,1,2,3,1,2,3],不符合该分布的即是违规,输出时对相应位置0 

 

示例  

1 输入:num = 12time = 3input =[1,2,3,3,1,3,1,1,1,1,2,3] 

输出:output = [1,2,3,0,0,3,1,0,0,1,2,3]  

2 输入:num = 11time = 4intput = [1,2,3,4,2,3,3,4,1,2,3] 

输出:output = [1,2,3,4,0,0,3,4,1,2,3] 

 

2. 输入联想(30分) 

 问题描述:  

输入联想功能是非常实用的一个功能,请编程实现类似功能。  

要求实现函数:  

void auto_complete(char *str, char *tmp,char *output) 

【输入】  char *str,候选字符串           char *tmp,输入字符串 【输出】  int *output,联想匹配的字符串 【返回】   

注:候选字符串以空格隔开,输入字符串仅从字符串开始处匹配。将匹配的子字符串输出,同样以空格隔开。如无匹配成功的子字符串,则输出空字符串。 

 

示例  

1 输入:str = chengdu chongqingtmp = c 

输出:output = chengdu Chongqing  

2 输入:str = chengdu chongqingtmp = che 

输出:end = Chengdu  

3)输入:str = beijing nanjingtmp = jing 

输出:end =     

 3. 语法分析(40分) 

 问题描述:  

编译器通过语法分析来检测程序的一些语法问题。要求实现一个简单的语法分析程序,判断输入的字符串是否有符合要求的语法组合。 

需要判断的语法组合有: if  then 

if  ( )  then switch case end switch ( ) case end 

switch ( ) case default end do while 

 

要求实现函数:  

void analysis(char *str,int *num) 

【输入】  char *str,待分析字符串       【输出】  int num,匹配的组合个数 【返回】   

注:输入字符串中关键字以空格隔开,"if""("")""case"等均表示关键字,从左向右,找到匹配的组合即可,组合一定是相互分离,不会嵌套,不会有交叉情况出现。 

 

示例  

1 输入:str = if then 

输出:num = 1  

2 输入:str = switch case aaa  

输出:num = 0  

3 输入:str = if ( aaa ) then do bbb while switch cas  

输出:num = 2 


本文出自 “tech” 博客,请务必保留此出处http://freemanwest.blog.51cto.com/1137962/1657486


推荐阅读
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了一道网络流题目hdu4888 Redraw Beautiful Drawings的解题思路。题目要求以行和列作为结点建图,并通过最大流算法判断是否有解以及是否唯一。文章详细介绍了建图和算法的过程,并强调在dfs过程中要进行回溯。 ... [详细]
  • 本文介绍了一个编程问题,要求求解一个给定n阶方阵的鞍点个数。通过输入格式的描述,可以了解到输入的是一个n阶方阵,每个元素都是整数。通过输出格式的描述,可以了解到输出的是鞍点的个数。通过题目集全集传送门,可以了解到提供了两个函数is_line_max和is_rank_min,用于判断一个元素是否为鞍点。本文还提供了三个样例,分别展示了不同情况下的输入和输出。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
author-avatar
g37112969
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有