每日一题带你巩固C语言

 作者:旧梦拾遗186

 专栏:C语言编程----小比特成长日记

 

目录

​编辑

前言:

一.字符串左旋

1.题目:

2.解析:

 3.答案:

解法1:

解法2:

二.杨氏矩阵

1.题目:

 2.解析:

 3.答案:


 

前言:

今天小编带大家学习,C语言相关题目的练习,做题是深入了解知识的关键,千万不可骄傲自满,要保持空卑心态,虚心学习。 包括(字符串左旋,杨氏矩阵)

一.字符串左旋

1.题目:

实现一个函数,可以左旋字符串中的k个字符。

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

2.解析:

这道题有两种解法

1.可以先将第一个字符取出,其他字符串前移,最有将取出的字符串放到字符串的最后一位。

 

 2.可以使用三步翻转法先但转要进行左旋的两个字符,再将剩下的字符依次进行反转,最后将整个字符串翻转。

 

 3.答案:

解法1:

#include<stdio.h>
zuoxuan(char arr[],int n)
{
	int i = 0;
	int ret = strlen(arr);
	for (i = 0; i < n; i++)
	{
		char temp = arr[0];
		for (int j = 0 ; j < ret; j++)
		{
               arr[j] = arr[j + 1];
		}
		arr[ret-1] = temp;
	}
}
int main()
{
	char arr1[] = "abcdef";
	int n = 0;
	scanf("%d", &n);
	zuoxuan(arr1, n);
	printf("%s", arr1);
	return 0;
}

结果:

 

 

解法2:

#include<stdio.h>
zuoxuan(char* left, char* right)
{
	while (left < right)
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}
test(char arr[],int n)
{
	int i = 0;
	int ret = strlen(arr);
	zuoxuan(arr, arr + n - 1);
	zuoxuan(arr + n, arr + ret - 1);
	zuoxuan(arr, arr + ret - 1);
	
}
int main()
{
	char arr1[] = "abcdef";
	int n = 0;
	scanf("%d", &n);
	test(arr1, n);
	printf("%s", arr1);
	return 0;
}

 结果:

 

二.杨氏矩阵

1.题目:

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

要求:时间复杂度小于O(N);

 2.解析:

因为矩阵从左向右,从上向下都为递增的,所以我们可以找右上角为突破点,及右上角为行上最大值列上的最小值,如果要找的值大于右上角的值则可以去掉一行,若小于则可以去掉一列。

 

 3.答案:

#include<stdio.h>
int found(int arr[3][3],int* row,int* col,int n)
{
	int x = 0;
	int y = 0;
	y = *col - 1;
	while ((x <= *row - 1) && (y >= 0))
	{
           if (n < arr[x][y])
	       {
		         y--;
	       }
	       else if (n > arr[x][y])
	       {
	            x++;
	       }
	       else
		   {
			   *row = x;
			   *col = y;
		       return 1;
				 
	       }
	}
	*row = -1;
	*col = -1;
	return 0;
}
int main()
{
	int arr[3][3] = {1,2,3,4,5,6,7,8,9};
	int n = 0;
	int a = 3;
	int b = 3;
	scanf("%d", &n);
	int ret=found(arr,&a,&b,n);
	if (ret == 1)
	{
		printf("%d,%d\n", a, b);
		printf("找到了");

	}
	else
	{
		printf("%d,%d\n", a, b);
		printf("没找到");
	}
	return 0;
}

 

结果:

 

 

 结语:

每个人的成长都是能力和想要得到的东西,不断匹配的过程,当你的才华和欲望不匹配时,你就该静下心来学习了,如果小编的总结能对你有所帮助,希望小伙伴们三连加关注哦,你的支持是小编创作的最大动力。 

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧梦拾遗186

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值