[牛客网]错题整理(6)

错题集

1.以下程序段执行后结果是()

#include<stdio.h>

void main()

{

    short *p,*q;

    short arr[15]={0};

    p=q=arr;

    p++;

    printf("%d,",p-q);

    printf("%d,",(char*)p-(char*)q);

    printf("%d",sizeof(arr)/sizeof(*arr));

}

答案:1,2 15

解析:指针自增、自减每次移动的偏移量是指针所指向对象的字节大小,所以p++与q的偏移量是2个字节。

指针相减的值是指针地址的偏移除以指针每次移位的大小;

1)p-q=1;偏移量为2个字节,每次移动2个字节,所以为1

2)(char *)p-(char *)q,指针的偏移没变,但是每次指针移位是按照(char*)类型移动,即每次移动1个字节,所以是2

3)数字每次元素2个字节,所以sizeof(arr)为30,sizeof(*arr)为2

 

2.下面程序输出是什么

int main()

{

    bool first=true;

    int sum=0;

    int value;

    unsigned short i=0xFFFF;

    for (;i>=0;--i)

    {

        if (first)

        {

            value=65536;

            sum+=value%3;

            first=false;

        }

        else{

            sum+=--value%3;

            if (value<=0)

            {

                cout<<sum<<","<<i;

                break;

            }

        }

    }

    return 0;

}

答案:65536,65535

解析:

True只经历一次, i=65535,sum=1,value=65536,

False第一次循环,i=65535-1,sum=1+0 =1,value=65535,

False第二次循环,i=65535-2,sum=1+2=3,value=65534,

False第三次循环,i=65535-3,sum=3+1=4,value=65533,

False第四次循环,i=65535-4,sum=4+0=4,value=65532,

False第五次循环,i=65535-5,sum=4+2=6,value=65531, ………

补充一点:for(;i>=0;--i)由于是unsigned无符号,所以并不是i<0退出循环,是当i=0后下一个i的值从最初的0xffff从头再开始(无法表示-1),也就是说如果for循环里没有break即死循环。-1 = 1000 0000 0000 0001B = 补码:1111 1111 1111 1111 = 无符号则为0xffff,存储方式为补码形式

【i】value:65535~0,而i: 65534~0,(还差一次循坏),所以当value=0时i=初值0xffff=65535;

【Sum】的规律:从false第二次开始看(循环65534~0共65535次),(组1)3,4,4, (组2)6,9,9, (组3)7,10,10…三个为一组,所以65535/3=21845…0,表示21845组第二个数值,sum=21845*3+1=65536

 

3.有定义如下:

static char x[ ]= "abcde";

static char y[ ]={ 'a', 'b', 'c', 'd', 'e'};

则正确的说法是?

答案:x数组的长度大于y数组的长度

解析:对于 static char x [ ]= "abcde" ;而言,长度为6,因为 "abcde" 是字符串,末尾默认有'\0'结束符,长度为6。

对于 static char y [ ]={ 'a' , 'b' , 'c' , 'd' , 'e' };而言,是将每个字符逐一赋值到y[]中,所以长度为5。

 

4.下面一段程序的输出结果是?

#define product(x) ((x)*(x))

int main()

{

    int i = 3, j, k;

    j = product(i++);

    k = product(++i);

    printf("%d %d", j, k);

    return 0;

}

答案:12 42

解析:这题在不同的编译器会有不同的结果:

第一种情况:

j = (i++*i++);=>3*4  第一次i++返回3 第二次i++返回4 最后i的值为5

k = (++i*++i);=>6*7  第三次++i返回6  第四次++i 返回7 最后i的值为7

但是还有一种编译器的分析情况是这样

j=(i++*i++)=>3*3 也就是说运行时直接使用的i的值3 但是i最终在内存的值还为5

毕竟加了2次

k = (++i*++i);=>7*7  运行时先计算的++i,然后取出i的最终值7 在计算乘法。

还有一种情况为:

j=(i++*i++)=>3*3 也就是说运行时直接使用的i的值3 但是i最终在内存的值还为5

毕竟加了2次

k = (++i*++i);=>5*5  运行时先取出i的值计算乘法,然后i的的值自增2次

终值7

 

<think>好的,我现在需要帮助用户获取华为OD机考相关的Java题库整理资料。首先,我要回忆用户提到的引用内容。用户提供了两个引用,一个是关于华为OD机考真题的示例,另一个是机考攻略和注意事项。 用户的需求很明确,他们想要Java题库的整理资料。我需要根据提供的引用内容,结合已知的信息,给出有效的建议。首先,引用1提到了一个专栏“2024华为OD机试真题(全栈版)”,这可能包含用户需要的题库资源。我需要推荐这个专栏,并说明它能帮助用户学习多种语言,包括Java。另外,引用2提到了牛客网的华为题库链接,用户可以通过练习那里的题目来熟悉考试内容。这两个资源应该作为主要推荐。 接下来,我需要考虑用户可能的深层需求。他们可能不仅需要题库,还需要备考策略和注意事项。引用2中详细列出了考试注意事项,比如浏览器版本、摄像头要求、编程规范等。我应该将这些信息整理出来,帮助用户避免考试中的常见问题。 另外,用户可能对如何高效备考感兴趣。可以建议分阶段学习,比如先刷题,再模拟考试,最后查漏补缺。同时,结合B站的视频资源(引用2中的链接)可以提供视觉化的学习方式,适合不同学习习惯的用户。 在回答结构上,需要按照用户的要求,分点清晰,步骤明确。首先推荐资料获取途径,然后提供备考建议,最后强调注意事项。这样用户能逐步跟随指引,准备考试。 最后,确保回答中的引用标识正确添加,如[^1]和[^2],并且语言简洁明了,符合用户要求的中文回答。同时,检查是否有遗漏的重要信息,比如华为OD的机考链接有效期和半年内不能重考的提醒,这些对用户来说都是关键点。 总结起来,回答需要涵盖推荐的资源、备考策略、注意事项,并引用提供的资料,确保用户能全面获取所需信息,顺利备考。</think>关于华为OD机考Java题库整理的获取与备考建议,以下是系统化的解决方案: ### 一、核心资料获取途径 1. **牛客网官方题库** - 访问[华为机试练习专区](https://www.nowcoder.com/ta/huawei/)可获取分类题库,包含高频考题如字符串处理、动态规划等 - 示例题目类型: ```java // 示例:字符串反转(需使用$...$格式) public static String reverseString(String s) { return new StringBuilder(s).reverse().toString(); } ``` 2. **全栈真题专栏** - 推荐订阅「2024华为OD机试真题(全栈版)」,覆盖Java/Python/C++多语言实现 - 包含完整代码模板与复杂度分析,如快速排序实现: ```java void quickSort(int[] arr, int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi-1); quickSort(arr, pi+1, high); } } ``` ### 二、高效备考策略 1. **三阶段学习法** - 第一阶段:专项突破(2周) - 重点攻克$动态规划$、$图论算法$等高频考点 - 每日完成5道中等难度题目 - 第二阶段:全真模拟(1周) - 使用[华为OD模拟考试系统](https://exam.nowcoder.com/cts/17063582/summary)进行限时训练 - 第三阶段:错题复盘(3天) - 建立错题本记录$边界条件处理$等易错点 2. **代码规范强化** - 命名规范:使用驼峰命名法(如`calculateSum()`) - 异常处理:必须包含输入校验逻辑 ```java if (input == null || input.length() == 0) { throw new IllegalArgumentException(); } ``` ### 三、关键注意事项 1. **环境配置** - 安装JDK 11+并配置环境变量 - 准备Eclipse/IntelliJ双开发环境(考试系统类似IDE) 2. **考场纪律** - 摄像头需全程开启,屏幕分享功能会被监控[^2] - 禁止切换浏览器标签(超过3次可能被判作弊) 3. **答题技巧** - 优先完成$100$分基础题,确保必得分 - 复杂题目先写伪代码框架,再补充实现 ### 四、延伸学习资源 1. **B站视频教程** - [华为OD机试冲刺课程](https://www.bilibili.com/video/BV1n5411t7WL)包含真题解析 2. **GitHub开源项目** - 搜索「huawei-od-java」可获取社区整理题库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值