#define _CRT_SECURE_NO_WARNINGS 1

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


//逆序字符串
//void reverse(char* str)
//{
// assert(str);
// int len = strlen(str);
// char* left = str;
// char* right = str + len - 1;
// while (left < right)
// {
// char tmp = *left;
// *left = *right;
// *right = tmp;
// left++;
// right--;
// }
//
//}
//int main()
//{
// char arr[256] = { 0 };
// //scanf("%s", arr);
// gets(arr);//读取一行
// reverse(arr);//逆序函数
// printf("逆序后:%s\n", arr);
// return 0;
//}


//计算a+aa+aaa+aaaa...
//int main()
//{
// int a = 0;
// int n = 0;
// scanf("%d%d", &a, &n);
// int sum = 0;
// int i = 0;
// int ret = 0;
// for (i = 0; i < n; i++)
// {
// ret = ret * 10 + a;
// sum += ret;
// }
// printf("%d\n", sum);
// return 0;
//}


//判断100000以内的水仙花数(自冥数)
//#include<math.h>
//int main()
//{
// int i = 0;
// for (i = 0; i <= 100000; i++)
// {
// int sum = 0;
// //1 计算i的位数
// int n = 1;
// int tmp = i;
// while (tmp /= 10)
// {
// n++;
// }
// //2 计算i的每一位的n次方之和
// tmp = i;
// while (tmp)
// {
// sum += pow(tmp % 10, n);//pow(x,y)函数是求x的y次方
// tmp /= 10;
// }
// //3 比较i=sum
// if (i == sum)
// {
// printf("%d ", i);
// }
//
// }
//
// return 0;
//}


//打印菱形
//int main()
//{
// int line = 0;
// scanf("%d", &line);
// //打印上半部分
// int i = 0;
// for (i = 0; i < line; i++)
// {
// //打印空格
// int j = 0;
// for (j = 0; j < line - 1 - i; j++)
// {
// printf(" ");
// }
// //打印*
// for (j = 0; j < 2 * i + 1; j++)
// {
// printf("*");
// }
// printf("\n");
// }
// //打印下半部分
// for (i = 0; i < line - 1; i++)
// {
// //打印空格
// int j = 0;
// for (j = 0; j <=i; j++)
// {
// printf(" ");
// }
// //打印*
// for (j = 0; j < 2 *(line-1-i)-1; j++)
// {
// printf("*");
// }
// printf("\n");
// }
// return 0;
//}


//有20元买汽水,汽水1元1瓶,两个空瓶可以换一个汽水,最多能喝到多少瓶汽水
//int main()
//{
// int money = 0;
// int total = 0;
// int empty = 0;
// scanf("%d", &money);
// if (money == 0)
// total = 0;
// else
// //total = 2 * money - 1;
// {
// total = money;
// empty = money;
// while (empty >= 2)
// {
// total += empty / 2;
// empty = empty / 2 + empty % 2;
// }
// }
// printf("total=%d\n", total);
// return 0;
//}


//交换数组的奇偶数,使左边是奇数,右边是偶数
//void move(int* arr, int sz)
//{
// int left = 1;
// int right = sz - 1;
// while (left < right)
// {
// while ((left < right) && (arr[left] % 2) == 1)
// {
// left++;
// }
// while ((left < right) && (arr[right] % 2 == 0))
// {
// right--;
// }
// if(left<right)
// {
// int tmp=arr[left];
// arr[left] = arr[right];
// arr[right] = tmp;
// }
// }
//}
//void print(int* arr, int sz)
//{
// int i = 0;
// for (i = 0; i < sz; i++)
// {
// printf("%d ", arr[i]);
// }
// printf("\n");
//}
//int main()
//{
// int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// move(arr, sz);
// print(arr, sz);
// return 0;
//}


//打印杨辉三角
//int main()
//{
// int arr[10][10] = { 0 };
// int i = 0;
// int j = 0;
// for (i = 0; i < 10; i++)
// {
// for (j = 0; j < 10; j++)
// {
// if (j == 0)
// {
// arr[i][j] = 1;
// }
// if (i == j)
// {
// arr[i][j] = 1;
// }
// if (i >= 2 && j >= 1)
// {
// arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
// }
// }
// }
// for (i = 0; i < 10; i++)
// {
// for (j = 0; j <=i; j++)
// {
// printf("%-3d ", arr[i][j]);
// }
// printf("\n");
// }
//
// return 0;
//}


//a说:不是我,b说:是c,c说:是d,d说:c在胡说
//已知3个人说的真话,1个人说的假话,写一个程序来确定谁是凶手
//int main()
//{
// int killer = 0;
// for (killer = 'a'; killer <= 'd'; killer++)
// {
// if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
// {
// printf("killer=%c\n", killer);
// }
// }
// return 0;
//}


//A说:B第二,我第三;B说:我第二,E第四;C说:我第一,D第二;D说:C最后,我第三;E说:我第四,A第一
//每个人说对了一半,判断名次
//int main()
//{
// int a = 0;
// int b = 0;
// int c = 0;
// int d = 0;
// int e = 0;
// for (a = 1; a <= 5; a++)
// {
// for (b = 1; b <= 5; b++)
// {
// for (c = 1; c <= 5; c++)
// {
// for (d = 1; d <= 5; d++)
// {
// for (e = 1; e <= 5; e++)
// {
// if( ((b==2)+(a==3)==1)&&
// ((b==2)+(e==4)==1)&&
// ((c==1)+(d==2)==1)&&
// ((c==5)+(d==3)==1)&&
// ((e==4)+(a==1)==1))
// {
// if(a*b*c*d*e==120)
// printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
// }
// }
// }
// }
// }
// }
// return 0;
//}


////左旋字符串,旋转两位
//
////1基础法
////void left_move(char* arr, int k)
////{
//// assert(arr);
//// int i = 0;
//// int len = strlen(arr);
//// for (i = 0; i < k; i++)
//// {
//// //左旋一个字符
//// char tmp = *arr;
//// int j = 0;
//// for (j = 0; j < len - 1; j++)
//// {
//// *(arr + j) = *(arr + j + 1);
//// }
//// *(arr + len - 1) = tmp;
//// }
////}
////2三步法
//void reverse(char* left, char* right)
//{
// assert(left);
// assert(right);
// 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, 2);
// printf("%s\n", arr);
// return 0;
//}


//判断一个字符串是否是另一个字符串旋转来的
//
////方法1
////void left_move(char* arr, int k)
////{
//// assert(arr);
//// int i = 0;
//// int len = strlen(arr);
//// for (i = 0; i < k; i++)
//// {
//// //左旋一个字符
//// char tmp = *arr;
//// int j = 0;
//// for (j = 0; j < len - 1; j++)
//// {
//// *(arr + j) = *(arr + j + 1);
//// }
//// *(arr + len - 1) = tmp;
//// }
////}
////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;
//// }
////}
////int main()
////{
//// char arr1[] = "abcdef";
//// char arr2[] = "cdefba";
//// int ret = is_left_move(arr1, arr2);
//// if (ret == 1)
//// printf("yes\n");
//// else
//// printf("no\n");
//// return 0;
////}
//
////方法2
////int is_left_move(char* s1, char* s2)
////{
//// int len1 = strlen(s1);
//// int len2 = strlen(s2);
//// if (len1 != len2)
//// return 0;
//// strncat(s1, s1, 6);//在s1字符串后追加1个s1字符串
//// char* ret = strstr(s1, s2);//判断s2指向的字符串是否是s1指向字符串的字符
//// if (ret == NULL)
//// {
//// return 0;
//// }
//// else
//// {
//// return 1;
//// }
////}
////int main()
////{
//// char arr1[30] = "abcdef";
//// char arr2[] = "cdefba";
//// int ret = is_left_move(arr1, arr2);
//// if (ret == 1)
//// printf("yes\n");
//// else
//// printf("no\n");
//// 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 = 7;
int x = 3;
int y = 3;
int ret = FindNum(arr, k, &x, &y);
if (ret == 1)
{
printf("找到了\n");
printf("下标是%d %d\n", x, y);
}
else
{
printf("找不到\n");
}
return 0;
}