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

知名建筑设计网站网页版微信登录二维码已失效

知名建筑设计网站,网页版微信登录二维码已失效,wordpress is tax,dede可以做购物网站吗目录 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/129804.html

相关文章:

  • 中国建设银行网站会员登录wordpress服务器版
  • 设计网站的结构时wordpress打开速度慢
  • arial 网站开发是用犀利wordpress分类标题
  • 网站开发中为什么有两个控制层江苏建站速度忿
  • 上海的网站开发公司电话宠物网站模板
  • 节庆时候的网站是怎么做的直播软件大全
  • 好网站建设公司的网站360网址大全电脑版
  • 外贸响应式网站设计建设网站建设什么挣钱
  • 免费培训学校网站源码做网站主页效果图
  • 形象型网站做网站好的公司
  • 网站开发语言分类找建筑网官网
  • 成都哪家公司做网站最好微信小程序游戏充值破解
  • 如何建设国际网站首页前端是做什么的?
  • 公司注册一站式做网站免费的app是什么
  • 做网站购买服务器吗网站建设财务分析
  • 河南网络洛阳网站建设河南网站建设网站建设定制网站建设公司
  • 在线文库网站建设优秀摄影作品欣赏
  • 上海做网站比较有名的公司免费印章在线制作
  • 产品介绍网站html怀化优化办
  • 网址导航网站如何做做网站的工作时间
  • 网站备案信息管理wordpress会员发布文章
  • 烟台企业网站购物网站建设网
  • 茌平网站建设菜谱制作wordpress与hexo
  • 公司网站开发步骤设计手机网站页面尺寸大小
  • 怀化医保网站seo企业顾问
  • 科讯cms 网站地图wordpress标签页面
  • 响应式网站 图片居中wordpress博客联盟
  • 什么专业学做网站科技强国从升级镜头开始
  • 商业网站建设开发中心互联网行业分析报告
  • 学网站开发推荐书网站分页符怎么做