当前位置: 首页 > news >正文

台州网站建设方案优化企业培训体系

台州网站建设方案优化,企业培训体系,网站建设要程序员吗,济南建网站公目录 1.单身狗1 1.1 题目 1.2 分析推理 1.3 代码实现 2.单身狗2 2.1 题目 2.2 分析推理 2.3 代码实现 3.字符串左旋 3.1 题目 3.2 分析推理 3.3 代码实现 3.3.1 方法一 3.3.2 优化一 3.3.2.1 思路分析 3.3.2.2 strcpy函数和strncat函数 3.3.2.3 代码实现 3.3.…目录 1.单身狗1 1.1 题目 1.2 分析推理 1.3 代码实现 2.单身狗2 2.1 题目 2.2 分析推理 2.3 代码实现 3.字符串左旋 3.1 题目 3.2 分析推理 3.3 代码实现 3.3.1 方法一 3.3.2 优化一 3.3.2.1 思路分析 3.3.2.2 strcpy函数和strncat函数 3.3.2.3 代码实现 3.3.3 优化二 3.3.3.1 思路分析 3.3.3.2 代码实现 4.字符串旋转结果 4.1 题目 4.2 分析推理 4.3 代码实现 1.单身狗1 1.1 题目 在一个整型数组中只有一个数字出现一次其他数组都是成对出现的请找出那个只出现一次的数字。 例如 数组中有1 2 3 4 5 1 2 3 4只有5出现一次其他数字都出现2次找出5 1.2 分析推理 这里我们借助一个操作符^ ----按位异或---对应的二进制位上相同则为0相异则为1 满足交换律eg1^2 ^12 类似消消乐一样 那我们顺着这个思路往下就可以将整个数组的元素都^ 最后的结果就是我们要找的单身狗 1.3 代码实现 #includestdio.h int main() {int arr[] { 1,2,3,4,5,4,3,2,1 };int sz sizeof(arr) / sizeof(arr[0]);int ret 0;for (int i 0; i sz; i){ret ^ arr[i];}printf(单身狗是%d, ret);return 0; } 2.单身狗2 2.1 题目 一个数组中只有两个数字是出现一次其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。 例如 有数组的元素是1234512346 只有5和6只出现1次要找出5和6. 2.2 分析推理 我们发现刚刚把里面所有的数字都异或一遍利用异或的方法不成立了。如果有两个数字都只出现了一次那么如此得到的应该是两个数异或的结果。 例子中异或的结果也就是5^ 60011 在单身狗1的基础上我们再来想想办法 首先这个结果肯定不是0要不然就全都配对了所以里面一定至少一位是一。找出值为1的一位以这一位的值将结果分为两组。这样的话就可以延用单身狗1的方法了。 例如1 2 3 4 1 2异或完的结果应该是3^4得到的111那么随便找一位就行了。例如找最低位那么这最低位是1的有1 3 1最低位是0的有2 4 2由于是利用异或结果为1的某一位分的组所以两个待查询数字一定分别在两组中。所以再找两个变量分别异或两组数即可找到这两个数。 2.3 代码实现 #includestdio.h void findnum(int arr[], int sz, int* ret1, int* ret2) {//整体异或int ret 0;for (int i 0; i sz; i){ret ^ arr[i];}//找到何处为1int pos -1;//位置上的值不是0就是1-1可以避免影响//从右往左遇到1就记录1的位置for (int i 0; i 32; i){if ((ret 1) 1)//---按位与---全1则为1有0则0{pos i;//记录1所在位置break;}}//分组分别异或for (int i 0; i sz; i){if ((arr[i] pos) 1)//右移pos位找到pos位上的值按位与{*ret1 ^ arr[i];}else{*ret2 ^ arr[i];}} } int main() {int arr[] { 1,2,3,4,5,6,4,3,2,1 };int sz sizeof(arr) / sizeof(arr[0]);//返回值int ret1 0;int ret2 0;findnum(arr, sz, ret1, ret2);//传址printf(单身狗是%d,%d\n, ret1, ret2);return 0; } 3.字符串左旋 3.1 题目 实现一个函数可以左旋字符串中的k个字符。 例如 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 3.2 分析推理 设计循环使其可以旋1次然后让他执行n次是一个最简单的思路一个一个慢慢挪 我们按照下标顺序一个一个将第一个下标对应的字符现存放到tmp空间再将tmp中存放的字符放到数组最后一个下标对应的位置以此类推 但是值得注意的是多次左旋结果可能相同 例如ABCD---4个字符---左旋159......等次数的结果一样---BCDA 3.3 代码实现 3.3.1 方法一 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h void leftround(char* arr, int len, int time) {int tmp,i,j;//左旋次数time % len;//左旋循环趟数for (i 0; i time; i){tmp arr[0];//将第一个坐标对应的字符放到tmp空间for (j 0; j len - 1; j)//j14--j3{//后面的覆盖到前面arr[j] arr[j 1];}arr[j] tmp;} } int main() {char arr[] ABCD;int time 0;scanf(%d\n, time);int len strlen(arr);leftround((char*)arr, len, time);printf(%s\n, arr);return 0; } 3.3.2 优化一 3.3.2.1 思路分析 改进一 这个思路当然可以但是一次一次转毕竟太麻烦就不能一次到位么 当然可以我们可以选择拼接法需要借助库函数一次到位 我们先将移动k次之后的剩余的字符挪到tmp空间存放再将移动k次涉及到的字符拷到tmp空间中刚刚字符的后面最后拷到原数组中 3.3.2.2 strcpy函数和strncat函数 3.3.2.3 代码实现 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h void leftround(char* arr, int len, int time) {//左旋次数time % len;char tmp[200] {0};strcpy(tmp, arr time);//将不涉及左旋的字符全部拷到tmpstrncat(tmp, arr, time);//将涉及到左旋的字符拼接到前面strcpy(arr, tmp);//最后拷回去原数组 } int main() {char arr[] ABCD;int time 0;scanf(%d\n, time);int len strlen(arr);leftround((char*)arr, len, time);printf(%s\n, arr);return 0; } 3.3.3 优化二 3.3.3.1 思路分析 改进二 方法二要用到一个数组形成的辅助空间让人觉得有点不爽还可以有更好的选择例如ABCDEFG左旋3次后变成DEFGABC有一个特殊的操作方式局部翻转 先将要左旋的前三个家伙逆序翻转ABCDEFG---CBADEFG然后将后半段也逆序翻转CBADEFG---CBAGFED最后整体逆序(翻转CBAGEFD--DEFGABC即可。这样只需要做数值交换即可可以写一个函数帮我们完成局部逆序 3.3.3.2 代码实现 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h void resrve_part(char* arr, int start, int end) {//交换位置---翻转倒序while (start end){char tmp arr[start];arr[start] arr[end];arr[end] tmp;start;end--;} } void leftround(char* arr, int len, int time) {//左旋次数time % len;resrve_part(arr, 0, time - 1);//翻转前半部分resrve_part(arr, time, len-1);//翻转后半部分resrve_part(arr, 0, len-1);//全部翻转 } int main() {char arr[] ABCD;int time 0;scanf(%d\n, time);int len strlen(arr);leftround((char*)arr, len, time);printf(%s\n, arr);return 0; } 4.字符串旋转结果 4.1 题目 写一个函数判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如给定s1 AABCD和s2 BCDAA返回1 给定s1abcd和s2ACBD返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一个字符得到DAABC 4.2 分析推理 本题最简单的思路就是可以将所有旋转后的结果放到一个数组里然后进行查找利用左旋的方法每左旋一次就去对比是否一样共左旋len次之后左旋结果重复 这里我们需要介绍一个用于比较不同的函数---strcmp函数 4.3 代码实现 4.3.1 方法一 #includestdio.h #includestring.h int findnum(char* arr1, char* arr2, int len) {int i, j, tmp;for (i 0; i len; i){tmp arr1[0];for (j 0; j len - 1; j){arr1[j] arr1[j 1];}arr1[j] tmp;if (strcmp(arr1, arr2) 0){return 1;}}return 0; } int main() {char arr1[] AABCD;char arr2[] ABDCA;int len strlen(arr1);int ret findnum((char*)arr1, (char*)arr2, len);printf(%d, ret);return 0; } 4.3.2 优化 4.3.2.1 思路分析 但是方法一这种做法既不好操作也太费事但是这题有一个很简单的做法---拼接法借助库函数 其实AABCD无论怎么旋旋转后的所有结果都包含在了AABCDAABCD这个字符串里了。 所以做法很简单只需要将原字符串再来一遍接在后面然后找一找待查找的字符串是不是两倍原字符串的子集即可。 但是我们需要借助库函数实现 4.3.2.2 strcat函数和strstr函数 4.3.2.3 代码实现 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h int findnum(char* arr1, char* arr2) {char tmp[200] { 0 };strcpy(tmp, arr1);//初始化字符串拷到tmpstrcat(tmp, arr1);//自己拼接自己return strstr(tmp, arr2) ! NULL;//能否找到 } int main() {char arr1[] AABCD;char arr2[] DCBAA;int ret findnum((char*)arr1, (char*)arr2);printf(%d, ret);return 0; } 到这里第二弹练习就结束了 PS小江目前只是个新手小白。欢迎大家在评论区讨论哦有问题也可以讨论的 如果对你有帮助的话记得点赞收藏⭐️关注➕
http://www.dnsts.com.cn/news/3126.html

相关文章:

  • 自建房设计网站推荐百度浏览器网址
  • 网站系统升级中百度手机版下载
  • 程序源代码下载网站百度账号怎么注册
  • 阿里云网站空间做商城流程重庆森林电影
  • 布吉做棋牌网站建设哪家技术好sem竞价
  • 通信科技网站设计网络推广哪家好
  • 深圳网站建设 案例百度推广的几种方式
  • 做电商网站必需知道qc深圳广告公司排名
  • 团购产品 网站建设搜索引擎优化seo专员
  • 专门做外挂的网站推广恶意点击软件怎样使用
  • 怎么做才能设计出好的网站百度seo关键词排名优化工具
  • 罗湖网站建设的公司重庆seo网站哪家好
  • 怎做不下网站刷枪百度在线扫题入口
  • 重庆网站建设技术支持成人职业技术培训学校
  • 3d做网站seo培训网
  • 抖音seo工具上海seo网站推广
  • 做pc端网站教程百度分公司
  • 广州新塘建网站市场调研模板
  • 房地产设计网站软文发布平台排名
  • 九游下载安装载南宁百度seo排名价格
  • 如何引用网站图片长沙百度公司
  • c web网站开发实例网站推广系统方案
  • 用asp.net做网站的书谷歌seo网站排名优化
  • 做网站要考虑哪些因素视频号最新动作
  • 旅游网站开发毕业论文品牌推广和品牌营销
  • 那种登录才能查看的网站怎么做优化网站技术外包公司
  • 成都专业建站推广公司什么平台打广告比较好免费的
  • 网站如何做那种诱导广告爱站网长尾关键词挖掘工具
  • 上海网站建设沪icp备苏州百度推广公司
  • 用py做网站百度一下就知道官方网站