当前位置:网站首页>分治与递归(练习题)
分治与递归(练习题)
2022-07-23 05:42:00 【你看那是一个舔狗】
问题1:使用递归倒叙输出数字
输入 : 12345
输出 : 54321
void ReversePrint(int a)
{
if (a <= 0)
{
printf("\n");
return;
}
printf("%d", a % 10);
ReversePrint(a / 10);
}
问题2:无序数组的查询(递归)
int Find_ar(int* ar, int pos, int len,int val)
{
if (ar[pos] == val)
return pos;
else if (pos == len)
return -1;
return Find_ar(ar, ++pos, len, val);
}
问题3:有序数组折半查找(递归和循环)
int Binary(int* ar, int val, int left,int right)//递归
{
int mid = (int)((left + right)*0.5);
if (ar[mid] == val)
{
return mid;
}
else if (ar[mid] > val)
{
return Binary(ar, val, left, mid - 1);
}
else if (ar[mid] < val)
{
return Binary(ar, val, mid + 1, right);
}
return -1;
}
int Binary2(int *ar, int len, int val)//循环
{
int left = 0;
int right = len;
int mid;
while (left <= right)
{
mid = (left + right) / 2;
if (val < ar[mid])
right = mid - 1;
else if (val > ar[mid])
left = mid + 1 ;
else return mid;
}
return -1;
}
问题4:全子集问题
void Swap(int& a, int& b)//交换
{
int tmp = a;
a = b;
b = tmp;
}
void Perm(int* ar, int pos, int len)//全子集
{
if (pos == len)
{
int i = 0;
for (; i < len; i++)
{
printf("%d", ar[i]);
}
printf("\n");
}
else {
for (int i = pos; i < len; i++)
{
Swap(ar[i], ar[pos]);
Perm(ar, pos + 1, len);
Swap(ar[pos], ar[i]);
}
}
}
问题5:查找数组中的值,没有返回将被插入的位置
int BinarySearch2(int *a, int length, int key)
{
int low = 1;
int high = length;
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (key<a[mid])
high = mid - 1;
else if (key>a[mid])
low = mid + 1;
else
return mid;
}
return mid;
}
问题6:贪吃的小Q
int GetMaxNum(int outday, int chocolateNum)
{
int left = 1;
int right = chocolateNum;
while (left <= right)
{
int mid = (left + right) / 2;
bool enough = true;
int remind = chocolateNum;
int eat = mid;
for (int i = 0; i < outday; i++)
{
if (eat > remind)
{
enough = false;
break;
}
remind -= eat;
eat = (eat + 1) / 2;
}
if (enough)
left = mid + 1;
else right = mid - 1;
}
return right;
}
问题7:寻找旋转数组的最小值
int FindMin(int* nums, int numsSize)
{
int left = 0;
int right = numsSize - 1;
int mid;
while (left <= right)
{
mid = left + ((right - left) / 2);
if (nums[mid] > nums[right])
left = mid + 1;
else
{
if (nums[mid] < nums[mid - 1])
return nums[mid];
right = mid;
}
}
return nums[mid];
}
问题8:使用二分法查询二维数组
bool FindArrMin(int* num, int rows, int columns,int val)
{
bool found = false;
if (num != NULL&&rows != 0 && columns != 0)
{
int row = 0;
int column = columns - 1;
while (row < rows&&column >= 0)
{
if (num[row*columns + column] == val)
{
found = true;
break;
}
else if (num[row*columns + column]>val)
--column;
else ++row;
}
}
return true;
}
问题9:寻找峰值
int Peak(int *ar, int len)//寻找峰值
{
if (ar == NULL || len == 1)
return -1;
int left = 0;
int right = len - 1;
int mid = 0;
if (ar == NULL || len == 1)
return -1;
int left = 0;
int right = len - 1;
int mid = 0;
while (left < right)
{
mid = left + (right - left) / 2;
if (ar[mid] >= ar[mid - 1] && ar[mid] >= ar[mid + 1])
{
return mid;
}
else if (ar[mid] > ar[mid + 1])
{
right = mid - 1;
}
else left = mid + 1;
}
return mid;
}
问题10:my_sqrt()的简单实现
int my_sqrt(int num)
{
if (num < 0)
return -1;
int i = 0;
for (;; i++)
{
if (i*i == num)
return i;
else if(i*i>num)
return i - 1;
}
}
边栏推荐
- NFT trading platform digital collection system | development and customization
- Digital collection development / meta universe digital collection development
- notepad++背景颜色调整选项中文释义
- [radiology] bugfix: when GLCM features: indexerror: arrays used as indexes must be of integer (or Boolean) type
- Charles抓包的使用步骤
- 1、MySQL初体验
- Es operation command
- NT68661-屏参升级-RK3128-开机自己升级屏参
- Quartz2.2 simple scheduling job
- 数仓4.0笔记---用户行为数据生成
猜你喜欢

八、集合框架和泛型

kubesphere haproxy+keepalived (一)

3. DQL (data query statement)

Pywinauto+ an application (learn to lesson 9) -- blocked

Data warehouse 4.0 notes - business data collection - sqoop

NFT digital collection system development: Shenzhen Evening News "good times travel" digital collection online seconds chime
![[doris] configure and basically use the contents system (continue to add content when you have time)](/img/74/21c5c0866ed6b1bb6f9a1e3755b61e.png)
[doris] configure and basically use the contents system (continue to add content when you have time)

11、多线程
![[metric] use Prometheus to monitor flink1.13org.apache.flink.metrics](/img/9a/f6ef8de9943ec8e716388ae6620600.png)
[metric] use Prometheus to monitor flink1.13org.apache.flink.metrics

Project instances used by activiti workflow
随机推荐
[hudi]hudi compilation and simple use of Hudi & spark and Hudi & Flink
shell取某一时间范围内月份
Understanding of the decoder in the transformer in NLP
[pyrodiomics] the extracted image omics characteristic value is abnormal (many 0 and 1)
Yarn容量调度器设置
Data warehouse 4.0 notes - business data collection - sqoop
Typescript common types
NFT digital collection system development, development trend of Digital Collections
ChaosLibrary·UE4开坑笔记
Machine learning algorithm for large factory interview (5) recommendation system algorithm
数仓4.0笔记——用户行为数据采集二
10、I/O 输入输出流
利用动态规划解决最长增长子序列问题
Kubesphere ha install (II)
[untitled]
Gerrit operation manual
ES操作命令
Installation and process creation of activiti app used by activiti workflow
Chinese interpretation of notepad++ background color adjustment options
Phxpaxos installation and compilation process