• 每日刷题巩固知识


    作者:旧梦拾遗186

    每日励志:

    成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑,所有的幸福都来自平凡的奋斗和坚持

    前言:

    学而时习之。

    目录

    公务员面试

    1.题目:

    描述

    2.答案:

     箭形图案

    1.题目:

    描述

    答案:

    结构体类型大小计算

    解析:

    找单身狗 

    题目:

    答案:

    模拟实现atoi

    题目:

    答案:



    公务员面试

    1.题目:

    描述

    公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。

    (注:本题有多组输入)

    输入描述:

    每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。

    输出描述:

    每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。

    示例1

    输入:

    99 45 78 67 72 88 60

    复制输出:

    73.00

    2.答案:

    1. #include
    2. int main()
    3. {
    4. int max = 0;
    5. int min = 100;
    6. int n = 0;
    7. int count = 0;
    8. int sum = 0;
    9. while (scanf("%d", &n) == 1)
    10. {
    11. count++;
    12. if (n > max)
    13. {
    14. max = n;
    15. }
    16. if (n < min)
    17. {
    18. min = n;
    19. }
    20. sum = sum + n;
    21. if (count == 7)
    22. {
    23. float su = (sum - max - min) / 5.0;
    24. printf("%.2lf\n", su);
    25. count = 0;
    26. max = 0;
    27. min = 100;
    28. sum=0;
    29. }
    30. }
    31. return 0;
    32. }

     箭形图案

    1.题目:

    描述

    KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。

    输入描述:

    本题多组输入,每行一个整数(2~20)。

    输出描述:

    针对每行输入,输出用“*”组成的箭形。

    示例1

    输入:

    2

    复制输出:

        *
      **
    ***
      **
        *

    复制

    示例2

    输入:

    3

    复制输出:

          *
        **
      ***
    ****
      ***
        **
          *

    复制

    示例3

    输入:

    4

    复制输出:

            *
          **
        ***
      ****
    *****
      ****
        ***
          **
            *

    答案:

    1. #include
    2. int main()
    3. {
    4. int n = 0;
    5. int i = 0;
    6. int j = 0;
    7. while ((scanf("%d", &n)) == 1)
    8. {
    9. for (i = 0; i < n+1; i++)
    10. {
    11. for (j = 0; j < 2 * (n - i) ; j++)
    12. {
    13. printf(" ");
    14. }
    15. for (j = 0;j<=i; j++)
    16. {
    17. printf("*");
    18. }
    19. printf("\n");
    20. }
    21. for (i = 0; i < n; i++)
    22. {
    23. for (j = 0; j < 2 *(i+1) ; j++)
    24. {
    25. printf(" ");
    26. }
    27. for (j = n; j >=i+1; j--)
    28. {
    29. printf("*");
    30. }
    31. printf("\n");
    32. }
    33. }
    34. return 0;
    35. }

    结构体类型大小计算

    1. 下面代码的结果是( )
    2. int main()
    3. {
    4. unsigned char puc[4];
    5. struct tagPIM
    6. {
    7. unsigned char ucPim1;
    8. unsigned char ucData0 : 1;
    9. unsigned char ucData1 : 2;
    10. unsigned char ucData2 : 3;
    11. }*pstPimData;
    12. pstPimData = (struct tagPIM*)puc;
    13. memset(puc,0,4);
    14. pstPimData->ucPim1 = 2;
    15. pstPimData->ucData0 = 3;
    16. pstPimData->ucData1 = 4;
    17. pstPimData->ucData2 = 5;
    18. printf("%02x %02x %02x %02x\n",puc[0], puc[1], puc[2], puc[3]);
    19. return 0;
    20. }

    A.02 03 04 05

    B.02 29 00 00

    C.02 25 00 00

    D.02 29 04 00

    解析:

     

     puc是一个char数组,每次跳转一个字节,结构体不是,它只有第一个元素单独享用一字节,其他三个元素一起共用一字节,所以puc被结构体填充后,本身只有两个字节会被写入,后两个字节肯定是0,至此AD排除,然后第一个字节是2就是2了,第二个字节比较麻烦,首先ucData0给了3其实是越界了,1位的数字只能是0或1,所以11截断后只有1,同理ucData1给的4也是越界的,100截断后是00,只有5的101是正常的。填充序列是类似小端的低地址在低位,所以排列顺序是00 101 00 1。也就是0010 1001,即0x29,故选B。

    找单身狗 

    题目:

    一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

    编写一个函数找出这两个只出现一次的数字。

    答案:

    1. #include
    2. void find_singe_dog(int a[], int sz, int* dog1, int* dog2)
    3. {
    4. int i = 0;
    5. int sum = 0;
    6. for (i = 0; i < sz; i++)
    7. {
    8. sum = sum ^ a[i];
    9. }
    10. int pos = 0;
    11. for (pos = 0; pos < 32; pos++)
    12. {
    13. if (((sum >> pos) & 1) == 1)
    14. break;
    15. }
    16. for (i = 0; i < sz; i++)
    17. {
    18. if ((a[i] >> pos)&1 == 1)
    19. {
    20. *dog1 ^= a[i];
    21. }
    22. else
    23. {
    24. *dog2 ^= a[i];
    25. }
    26. }
    27. }
    28. int main()
    29. {
    30. int a[] = { 1,1,2,2,3,4,5,5,6,6 };
    31. int sz = sizeof(a)/sizeof(a[0]);
    32. int dog1 = 0;
    33. int dog2 = 0;
    34. find_singe_dog(a,sz,&dog1,&dog2);
    35. printf("%d,%d", dog1, dog2);
    36. return 0;
    37. }

    模拟实现atoi

    题目:

    模拟实现atoi

    答案:

     

    1. #include
    2. #include
    3. #include
    4. #include
    5. enum Status
    6. {
    7. VALID,
    8. INVALID
    9. }sta=INVALID;//默认初始值是INVALID
    10. int my_atoi(char* str)
    11. {
    12. int flag = 1;
    13. assert(str);
    14. if (*str == '\0')
    15. {
    16. return 0;//非法访问
    17. }
    18. while (isspace(*str))//跳过空格
    19. {
    20. str++;
    21. }
    22. if (*str == '+')
    23. {
    24. flag = 1;
    25. str++;
    26. }
    27. else if (*str == '-')
    28. {
    29. flag = -1;
    30. str++;
    31. }
    32. long long int ret = 0;
    33. while (*str)
    34. {
    35. if (isdigit(*str))
    36. {
    37. ret = ret * 10 + flag*(*str - '0');
    38. if (ret > INT_MAX || ret < INT_MIN)
    39. {
    40. return 0;
    41. }
    42. }
    43. else
    44. {
    45. return (int)ret;
    46. }
    47. str++;
    48. }
    49. sta = VALID;
    50. return flag*ret;
    51. }
    52. int main()
    53. {
    54. char a[200] = "+123ab45";
    55. int ret = my_atoi(a);
    56. if (sta==INVALID)
    57. {
    58. printf("非法转换%d\n",ret);
    59. }
    60. else if(sta==VALID)
    61. {
    62. printf("合法转换%d\n", ret);
    63. }
    64. return 0;
    65. }

    注意:atoi是实现将字符串转换为整数的库函数

    要排除几种错误

    //1. 空指针
    241//2. 空字符串
    242//3. 空格
    243//4. +-
    244//5. 越界
    245//6. 非数字字符

     

     

    结语:

     每个人的成长都是能力和想要得到的东西,不断匹配的过程,当你的才华和欲望不匹配时,你就该静下心来学习了,如果小编的总结能对你有所帮助,希望小伙伴们三连加关注哦,你的支持是小编创作的最大动力。  

  • 相关阅读:
    【超硬核】-1万字详尽大厂团队SQL开发规范,Review没人能笑着出来
    31、CSS进阶——@规则
    JVM阶段(5)-引用系列
    在Android studio高版本上使用低版本的Github项目库报错未能解析:Landroid/support/v4/app/FrageActivity;
    Linux权限管理(umask、粘滞位)
    JAVA最全面试题汇总基础篇(二)
    Java核心编程(11)
    盛最多水的容器
    创建运行时类的对象
    datawhale8月组队学习《pandas数据处理与分析》(下)(文本、分类、时序数据)
  • 原文地址:https://blog.csdn.net/weixin_67900732/article/details/126015888