1.题目名称:杨氏矩阵
题目内容:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
//思想:从右上角开始查找,arr[0][4]为右上角,比右上角小则向左,比它大则向下
int main()
{
int arr[5][5] = {
{1,2,3,4,5},
{2,4,6,8,10},
{3,6,9,12,15},
{6,8,13,15,18},
{8,15,17,22,23} };
int input;
scanf("%d", &input);
int row = 5, col = 5;
int i = 0, j = col-1;
while (i<row&&j>=0) {
if (input > arr[i][j]) {
i++;//向下查找
continue;
}
else if (input < arr[i][j]) {
j--;//向左查找
continue;
}
printf("找到了,对应位置是%d,%d\n", i, j);
return 0;
}
//当循环访问越界,跳出循环时,就是表示找不到
printf("找不到。\n");
return 0;
}
2.题目名称:杨辉三角
题目内容:在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1
……
// row表行,col表列;规律:每个数字等于它左上角数加上上方的数之和
int main()
{
int n;
printf("input:");//输入要输出的行数
scanf("%d", &n);
int arr[100][100] = { 0 };
arr[0][0] = 1;
printf("%d\n", arr[0][0]);
for (int row = 1; row <n; row++) {
arr[row][0] = 1;
for (int col = 1; col <=row; col++) {
arr[row][col] = arr[row - 1][col] + arr[row - 1][col - 1];
}
for (int col = 0; col <=row; col++) {
printf("%d ", arr[row][col]);
}printf("\n");
}
return 0;
}
3.题目名称:字符串左旋
题目内容:实现一个函数,可以左旋字符串中的k个字符。
例如:ABCD左旋一个字符得到BCDA;ABCD左旋两个字符得到CDAB
法一:
void str_rotate(char* str) {
char ch = *str;
int len = strlen(str);
for (int i = 1; i < len; i++) {
str[i - 1] = str[i];
}
str[len - 1] = ch;
return;
}
int main()
{
char str[32] = { 0 };
printf("input the str:");
scanf("%s", str);
int rotate;
printf("input 旋转次数:");
scanf("%d", &rotate);
for (int i = 0; i < rotate; i++) {
str_rotate(str);
}
printf("%s\n", str);
return 0;
}
法二:
void str_rotate1(char* str,int n) {
n = n % sizeof(str);
char tmp[1024] = { 0 };
strcpy(tmp, str);//abcd
strcat(tmp, str);//abcdabcd
strcpy(str, tmp + n, strlen(str));
}
void reverse(char *str,int start,int end) {
for (; start < end; start++, end--) {
char ch = str[start];
str[start] = str[end];
str[end] = ch;
}
}
int main()
{
char str[32] = { 0 };
printf("input the str:");
scanf("%s", str);
int rotate;
printf("input 旋转次数:");
scanf("%d", &rotate);//旋转此时多了就是重复旋转,取模长度之后得到的是实际旋转次数
rotate = rotate % strlen(str);
//str_rotate1(str, rotate);
reverse(str, 0, rotate - 1);
reverse(str, rotate, strlen(str) - 1);
reverse(str, 0, strlen(str) - 1);
printf("%s\n", str);
return 0;
}