【华为机试】——每日刷题经验分享

【华为机试】——每日刷题经验分享😎

  • 前言🙌
    • 题目:HJ14 字符串排序
    • HJ15 求int型正整数在内存中存储时1的个数
    • HJ2 计算某字符出现次数
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【华为机试】——每日刷题经验分享。

题目:HJ14 字符串排序

在这里插入图片描述

示例1
输入:
9
cap
to
cat
card
two
too
up
boat
boot

输出:
boat
boot
cap
card
cat
to
too
two
up

在这里插入图片描述

在这里插入图片描述

解题思路分享:

  • 这道题运用的知识有二维数组和冒泡排序的思维以及memmove函数,strcmp函数的使用。
  • 首先创建一个二维数组,来存储输入的n个字符串(线上编译器是支持变长数组语法的)。然后再开辟一个临时数组来进行两个字符串内容的交换。
  • 在C语言中,两个字符串的比较用strcmp函数。按照题目要求是将输入的字符串排成一个升序。
  • 这里利用循环和if条件结合就Ok啦。
    这里不用想的那么复杂,其实可以理解为平时的一维数组对一组数字的排序。这里的字符串类比于每一个数字,arr【i】其实就是每一个字符串地址(数的地址),arr【i】【j】相当于取出这个字符串(数)。
#include 
#include
int main() 
{int n = 0;scanf("%d",&n);char arr[n][101];int i = 0;char tem[101];for(i = 0; i < n; i++){scanf("%s",arr[i]);}for (i = 0 ; i < n ; i ++){int j = 0;for(j = 0; j < n - i - 1; j++){if(strcmp(arr[j] , arr[j + 1]) > 0){memmove(tem,arr[j],101);memmove(arr[j],arr[j + 1],101);memmove(arr[j + 1],tem,101);}}}for(i = 0; i < n; i++){printf("%s\n",arr[i]);}return 0;
}

在这里插入图片描述

HJ15 求int型正整数在内存中存储时1的个数

描述
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数

在这里插入图片描述

画图分析:
在这里插入图片描述
解题小结
因此,可以利用一个循环,当n中的1都变成0后,即循环就可以终止了,此时循环进行的次数就是n二进制1的个数

#include int main()
{int n = 0;scanf("%d", &n);int count = 0;while (n){n &= n - 1;count++;}printf("%d", count);return 0;
}

在这里插入图片描述

HJ2 计算某字符出现次数

在这里插入图片描述
解题思路点拨:

  • 采用分类讨论的思想,这里输入的字符包括数字,字母还有一些符号。因为字母比较特殊,相对应的有小写和大写字母两种。而且题目也说到小写和大写字母都是同一计算个数的。因此,我们可以将统计字母和其他字符出现个数分开。
  • 这里利用touper,将输入的字母都转换为大写方便对字母个数的统一处理。
#include 
#include
#includeint count_ele(char* p, int len, char ch) {//将字母都变成大写if (ch  >=  97 )ch = toupper(ch);int count = 0;int i = 0;// 字母if ( ch >= 65 && ch <= 91) {for (i = 0; i < len; i++) {if (p[i] == ch || p[i] == ch + 32)count++;}} //其他字符else {for (i = 0; i < len; i++) {if (p[i] == ch)count++;}}return count;
}
int main() {char arr[1000] = { 0 };gets(arr);char ch = 0;scanf("%c", &ch);int len = strlen(arr);int ret = count_ele(arr, len, ch);printf("%d", ret);
}

在这里插入图片描述

总结撒花💞

   本篇文章旨在分享【华为机试】——每日刷题经验相关知识。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部