杨氏矩阵、杨辉三角、字符串旋转

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值