C语言练习 -- 14

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<string.h>
#include<assert.h>

//实现一个函数,可以左旋字符串中的k个字符
//例如:
//ABCD左旋一个字符得到BCDA
//ABCD左旋两个字符得到CDAB

//void left_move(char arr[], int k)
//{
//
//}

//暴力求解法
//void left_move(char* arr, int k)
//{
//    assert(arr);
//    int i = 0;
//    int len = strlen(arr);
//    for (i = 0; i < k; i++)
//    {
//        //左旋转一个字符
//        //1
//        char tmp = *arr;
//        //2
//        int j = 0;
//        for (j = 0; j < len-1; j++)
//        {
//            *(arr + j) = *(arr + j + 1);
//        }
//        //3
//        *(arr + len - 1) = tmp;
//    }
//}

//2.三步翻转法
//ab cdef
//ba fedc
//cdefab

//逆序字符串的函数
//void reverse(char* left,char* right)
//{
//    assert(left != NULL);
//    assert(right != NULL);
//    while (left < right)
//    {
//        char tmp = *left;
//        *left = *right;
//        *right = tmp;
//        left++;
//        right--;
//    }
//}
//
//void left_move(char* arr, int k)
//{
//    assert(arr);
//    int len = strlen(arr);
//    assert(k <= len);
//    reverse(arr,arr+k-1);//逆序左边
//    reverse(arr+k,arr+len-1);//逆序右边
//    reverse(arr,arr+len-1);//逆序整体
//}

//int main()
//{
//    char arr[] = "abcdef";
//    left_move(arr, 4);
//    printf("%s\n", arr);
//    return 0;
//}

//abcdef
//bcdefa
//cdefab
//defabc
//efabcd
//fabcde

//int is_left_move(char* s1, char* s2)
//{
//    int len = strlen(s1);
//    int i = 0;
//    for (i = 0; i < len; i++)
//    {
//        left_move(s1, 1);
//        int ret = strcmp(s1, s2);
//        if (ret == 0)
//            return 1;
//    }
//    //
//    return 0;
//}


//abcdefabcdef

//int is_left_move(char* str1, char* str2)
//{
//    int len1 = strlen(str1);
//    int len2 = strlen(str2);
//    if (len1 != len2)
//    {
//        return 0;
//    }
//    //1. str1字符串中追加一个shr1字符串
//    //2. 判断str2指向的字符串是否是str1指向的字符串的字串
//    //strcat(str1, str1);//error
//    strncat(str1, str1, 6);
//    //strstr - 找字串的
//    char* ret = strstr(str1, str2);
//    if (ret == NULL)
//    {
//        return 0;
//    }
//    else
//    {
//        return 1;
//    }
//}
//int main()
//{
//    char arr1[30] = "abcdef";
//    char arr2[] = "cdef";
//    int ret = is_left_move(arr1,arr2);
//    if (ret == 1)
//    {
//        printf("Yes\n");
//    }
//    else
//        printf("No\n");
//    return 0;
//}

//杨氏矩阵
//有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在
//要求:时间复杂度<0(N);

//int FindNum(int arr[3][3], int k, int row, int col)
//{
//    int x = 0;
//    int y = col - 1;
//    while (x<=row-1 && y>=0)
//    {
//        if (arr[x][y] > k)
//        {
//            y--;
//        }
//        else if (arr[x][y] < k)
//        {
//            x++;
//        }
//        else
//        {
//            return 1;
//        }
//    }
//    return 0;
//}


//int FindNum(int arr[3][3], int k, int* px, int* py)
//{
//    int x = 0;
//    int y = *py - 1;
//    while (x<=*px-1 && y>=0)
//    {
//        if (arr[x][y] > k)
//        {
//            y--;
//        }
//        else if (arr[x][y] < k)
//        {
//            x++;
//        }
//        else
//        {
//            *px = x;
//            *py = y;
//            return 1;
//        }
//    }
//    //找不到
//    return 0;
//}
//
//int  main()
//{
//    int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
//    int k = 0;
//    int x = 3;
//    int y = 3;
//    scanf("%d", &k);
//    //返回型参数
//    int ret = FindNum(arr, k, &x, &y);
//    if (ret == 1)
//    {
//        printf("找到了\n");
//        printf("下标是:%d %d\n", x, y);
//    }
//    else
//    {
//        printf("找不到\n");
//    }
//    return 0;
//}

 

posted @ 2022-05-27 09:01  JimJZY  阅读(79)  评论(0)    收藏  举报