• 循环与数组问题


    以下代码的输出结果是什么?[中国著名金融企业J银行2008年面试题]

    A.10,0,9,1
    B.10,10,9,0
    C.10,1,9,2
    D.9,10,8,0
    解析:for循环括号内被两个分号分为3部分:i=0是初始化变量;x>8是循环条件,也就
    是只要x>8就执行循环;那y=i++是什么?在第一次循环时执行了么?答案是不执
    行,y=i++实际上是个递增条件,仅在第二次循环开始时才执行。所以结果是10,10,9,0。
    务必要搞清楚下面程序和题目的不同点:

    与题目不同,y=i++在循环体内,而不作为递增条件,所以在第一次循环就执行了,所
    以输出结果是10,0,9,1。
    答案:B

    -------------------------------------------------------------------------------------------------------------------------------------------

    有两等长数组A、B,所含元素相同,但顺序不同,只能取得A数组某值和B数
    组某值进行比较,比较结果为大于、小于或等于,但是不能取得同一数组A或B中的两个数
    进行比较,也不能取得某数组中的某个值。写一个算法实现正确匹配(即A数组中某值与B
    中某值等值)。[英国著名图形图像公司A 2007年4月校园招聘面试题]
    解析:算法:循环加判断可以很快地解决这个问题。算法分析:假设两个数组
    A[10]、B[10]。将A.0与B.0进行比较,判断它们是否等值或大于、小于,如果等值则
    打印出来,不等则比较B.1……依次类推。
    答案:
    代码如下:

    我们这里用的循环加比较的算法可以很快地解决这个问题,但却并不是最优算法。如果笔试时间充足的话,我们可以
    对算法做某些优化。
    建立一个结构数组C,结构为{某数在B中的位置,标记,某数在A中的位置}。其中“标记”可为大于、小于、等于。“某
    数在A/B中的位置”为0~n-1,这是相应位置。第一次比较后,C中元素都为{某数在B中的位置,标记,A0}格式。然后执
    行如下步骤:
    (1)在A数组中随机选取一个数(根据题意,我们并不知道这个值的确定值是多少),比如说A[i],然后和B数组中
    的数进行比较。根据数据结构C,将B数组中每个数与A[i]进行比较,若比A[i]大,从后向前存储,比A[i]小则从前向
    后存储,要是等于A[i],就记录下这个值在B的位置j。继续比较,直到B数组中的数全部比较完成,然后再把这个b[j]
    插入空余的那个中间位置。
    (2)然后再从A数组中取出数A[k]{k=0~n}与B[j](这个B[j]就是A[i],因为同一数组中不能比较大小,只
    能采用这种方式)比较,若比B[j]大,那么从结构数组C中A[i]后面比较,若比B[j]小,就从结构数组C中A[i]前面
    比较,直到找到相等的为止,然后更新结构数组C中与这个相等的相应值。注意,在这里,只更新相等的那个数值的“标
    记”,其他与A[k]不相同(或大,或小)的情况下不更新,即还保持A[i]的比较结果,以利于下一次进行比较。
    (3)重复步骤(2),继续取A数组剩下的值,仍然与那个B[j]比较,这样逐步更新结构数组C,直到A数组全部取
    出比较完,那么这个程序也就完成了相应的功能。
    这里用到了快速排序和二分法的某些思想。选择合理的A[i],可以大大降低比较次数。

  • 相关阅读:
    oracle--单表查询
    oracle--本地网络配置tnsnames.ora和监听器listener.ora
    HDU1251统计难题(字典树Trie Tree好题)
    模板——字典树Trie Tree
    51nod——1277 字符串中的最大值
    KMP——hdu 3336 count the string
    KMP模板
    KMP——Game
    BFS——Weed
    DFS——Sum It Up
  • 原文地址:https://www.cnblogs.com/yihujiu/p/6368349.html
Copyright © 2020-2023  润新知