左旋字符串
长度len,左旋k位
思路一:先把第1位存下来,再将源字符串左移1位,然后把存下来的第一位放到末尾
要旋转几个就运行几次
思路二:以第k位为界限,把左右两边的字符串都逆序,然后整体逆序
图示
代码:
//void reverse(char* left, char* right)
//{
// assert(left && right);
// while (left < right)
// {
// char tmp = *left;
// *left = *right;
// *right = tmp;
// left++;
// right--;
// }
//}
//
//void left_rotate(char arr[], int k)
//{
// int len = strlen(arr);
// k%=len;
// reverse(arr, arr+k-1);//左
// reverse(arr+k, arr+len-1);//右
// reverse(arr, arr + len-1);//整
//}
杨氏三角
//struct Point //点的坐标
//{
// int x;
// int y;
//};
//
//struct Point find_num(int arr[3][3], int r, int c, int k)//struct point返回类型的函数
//{
// int x = 0;
// int y = c - 1;
// struct Point p = { -1, -1 };
// while (x <= r - 1 && y >= 0)//用到了上面左下右上数字的性质
// {
// if (k < arr[x][y])
// {
// y--;
// }
// else if (k > arr[x][y])
// {
// x++;
// }
// else
// {
// p.x = x;
// p.y = y;
// return p;
// }
// }
// return p;//找不到
//}
//
//int main()
//{
// int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
// int k = 0;
// scanf("%d", &k);
// struct Point ret = find_num(arr, 3, 3, k);
// printf("%d %d\n", ret.x, ret.y);
// return 0;
//}
一个抽象变量需要多个元素表示才能确定时,考虑结构体(坐标点)
二维数组传参时,数组名表示第一行一维数组的地址,所以不能用普通指针接收,要用数组指针
输入n行m列的二维数组:
int arr[row][col] = { 0 };
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
scanf("%d", &arr[i][j]);
}
}