作者:旧梦拾遗186
目录
前言:
今天小编带大家学习,C语言相关题目的练习,做题是深入了解知识的关键,千万不可骄傲自满,要保持空卑心态,虚心学习。 包括(字符串左旋,杨氏矩阵)
一.字符串左旋
1.题目:
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
2.解析:
这道题有两种解法
1.可以先将第一个字符取出,其他字符串前移,最有将取出的字符串放到字符串的最后一位。
2.可以使用三步翻转法先但转要进行左旋的两个字符,再将剩下的字符依次进行反转,最后将整个字符串翻转。
3.答案:
解法1:
#include<stdio.h> zuoxuan(char arr[],int n) { int i = 0; int ret = strlen(arr); for (i = 0; i < n; i++) { char temp = arr[0]; for (int j = 0 ; j < ret; j++) { arr[j] = arr[j + 1]; } arr[ret-1] = temp; } } int main() { char arr1[] = "abcdef"; int n = 0; scanf("%d", &n); zuoxuan(arr1, n); printf("%s", arr1); return 0; }
结果:
解法2:
#include<stdio.h> zuoxuan(char* left, char* right) { while (left < right) { char temp = *left; *left = *right; *right = temp; left++; right--; } } test(char arr[],int n) { int i = 0; int ret = strlen(arr); zuoxuan(arr, arr + n - 1); zuoxuan(arr + n, arr + ret - 1); zuoxuan(arr, arr + ret - 1); } int main() { char arr1[] = "abcdef"; int n = 0; scanf("%d", &n); test(arr1, n); printf("%s", arr1); return 0; }
结果:
二.杨氏矩阵
1.题目:
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N);
2.解析:
因为矩阵从左向右,从上向下都为递增的,所以我们可以找右上角为突破点,及右上角为行上最大值列上的最小值,如果要找的值大于右上角的值则可以去掉一行,若小于则可以去掉一列。
3.答案:
#include<stdio.h> int found(int arr[3][3],int* row,int* col,int n) { int x = 0; int y = 0; y = *col - 1; while ((x <= *row - 1) && (y >= 0)) { if (n < arr[x][y]) { y--; } else if (n > arr[x][y]) { x++; } else { *row = x; *col = y; return 1; } } *row = -1; *col = -1; return 0; } int main() { int arr[3][3] = {1,2,3,4,5,6,7,8,9}; int n = 0; int a = 3; int b = 3; scanf("%d", &n); int ret=found(arr,&a,&b,n); if (ret == 1) { printf("%d,%d\n", a, b); printf("找到了"); } else { printf("%d,%d\n", a, b); printf("没找到"); } return 0; }
结果:
结语:
每个人的成长都是能力和想要得到的东西,不断匹配的过程,当你的才华和欲望不匹配时,你就该静下心来学习了,如果小编的总结能对你有所帮助,希望小伙伴们三连加关注哦,你的支持是小编创作的最大动力。