C语言如何实现一些算法或者函数你知道吗

 更新时间:2022年03月01日 15:31:44   作者:cy Hunter  
这篇文章主要为大家详细介绍了C语言实现一些算法或者函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

1.递归二分搜索

#include<bits/stdc++.h>
using namespace std;
int a[100];
int pos = -1;

void binarysearch(int l, int r, int x){
	if(l > r)return;
	else{
		int mid = (l+r)/2;
		if(x == a[mid]) {
			pos = mid;
			return;
		}
		if(x < a[mid]) return binarysearch(l, mid-1, x);
		else return binarysearch(mid+1, r, x);
	}
}

int main(){
	int n;
	cin>>n; //输入元素个数 
	for(int i=0; i<n; i++)cin>>a[i];
	sort(a, a+n);
	binarysearch(0, n-1, 5);//二分搜索 
	cout<<pos;//输出找到的位置下标 
	return 0;
} 

结果示例

在这里插入图片描述

2.递归归并排序

C语言递归实现归并排序

3.Ackerman函数

#include<bits/stdc++.h>
using namespace std;
long Ackerman(long n, long m){
	if(n >= 0 && m >= 0){
		if(n == 1 && m == 0)return 2;
		if(n == 0 && m >= 0)return 1;
		if(n >= 2 && m == 0)return n+2;
		if(n >= 1 && m >= 1)return Ackerman(Ackerman(n-1, m), m-1);
	}
} 

int main(){
	long n, m;
	cin>>n>>m;
	cout<<Ackerman(n, m);
	return 0;
} 

结果示例

在这里插入图片描述

4.Fibonacci数列

#include<bits/stdc++.h>
using namespace std;
int fibonacci(int n){
	if(n == 1)return 1;
	else if(n == 2)return 1;
	else return fibonacci(n-1)+fibonacci(n-2);
	
}
int main(){
	int n;
	cin>>n;//返回斐波那契数列第几项 
	cout<<fibonacci(n);
	return 0;
} 

结果示例

在这里插入图片描述

5.递归求排列

#include<bits/stdc++.h>
using namespace std;
int a[20], b[20];//a[]为排列的盒子,b[]为判断元素是否放过的数组 
int n;
void perm(int k){//k表示开始放第k个数 
	if(k == n+1){//当k>n时说明第k个数已经放好,已经一组排列完毕 
		for(int i=1; i<=n; i++){
			cout<<a[i]<<" ";
		}
		cout<<endl;
	}
	else{
		for(int i=1; i<=n; i++){//1-n个数各自放入盒子a[]中 
			if(b[i] == 0){//初始化b[]都为0,为0说明这个数没放过 
				a[k] = i;//第k个数放入i 
				b[i] = 1;//i放了因此后面不能再放了 
				perm(k+1);//放第二个数。 
				b[i] = 0;//虽然第一次排列放了,但是第二次排列还需要用到。 
			}
		}
	}
}
int main(){
	cin>>n;//排列数个数 
	perm(1);//从放第一个数开始排列 
	return 0;
} 

示例结果

在这里插入图片描述

6.求最大公约数

#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
	return b==0?a:gcd(b, b%a);
} 
int main(){
	int a, b;
	cin>>a>>b;
	cout<<gcd(a,b);
} 

示例结果

在这里插入图片描述

7.偶位数的大整数乘法

#include<bits/stdc++.h>
using namespace std;
long mul(long x, long y, long n){
	if(x == 0 || y == 0)return 0;
	else if(n == 1)return x * y;
	else{
		long A = (long)x / pow(10, (long)(n/2));
		long B = x - A * pow(10, n/2);
		long C = (long)y / pow(10, (long)(n/2));
		long D = y - C * pow(10, n/2);
		long AC = mul(A, C, n/2);
		long BD = mul(B, D, n/2);
		long A_BD_C = mul((A - B),(D - C), n/2); 
		return AC * pow(10, n) + (A_BD_C + AC + BD)* pow(10, (long)(n/2)) + BD;
	}
}
int main(){
	long a, b, n, sign;
	if((a<0 && b>0) || (a>0 && b<0))sign = -1;
	else sign = 1;
	cin>>a>>b>>n;
	cout<<mul(a, b, n) * sign;
} 

结果示例

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!      

相关文章

  • Qt 实现画线笔锋效果详细原理及示例代码

    Qt 实现画线笔锋效果详细原理及示例代码

    这篇文章主要介绍了Qt 实现画线笔锋效果详细原理及示例代码。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Opencv处理图像之轮廓提取

    Opencv处理图像之轮廓提取

    这篇文章主要为大家详细介绍了Opencv处理图像之轮廓提取,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 详解C语言中write函数

    详解C语言中write函数

    write函数,是一个C语言函数,功能为将数据写入已打开的文件内,这篇文章主要介绍了C语言中write函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • C++ Futures与Promises线程使用示例讲解

    C++ Futures与Promises线程使用示例讲解

    future和promise的作用是在不同线程之间传递数据。使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问;而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要更改有关的接口,比较麻烦
    2022-11-11
  • C++模板Template详解及其作用介绍

    C++模板Template详解及其作用介绍

    这篇文章主要介绍了C++中模板(Template)的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C++11新特性std::make_tuple的使用

    C++11新特性std::make_tuple的使用

    这篇文章主要介绍了C++11新特性std::make_tuple的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • OJ中G++和C++的区别

    OJ中G++和C++的区别

    今天小编就为大家分享一篇关于OJ中G++和C++的区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 基于matlab实现DCT数字水印嵌入与提取

    基于matlab实现DCT数字水印嵌入与提取

    数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值。本文主要为大家介绍了基于matlab如何实现数字水印的嵌入与提取,感兴趣的可以学习一下
    2022-01-01
  • VS2019调试C语言程序(监视操作)的详细步骤

    VS2019调试C语言程序(监视操作)的详细步骤

    在很多时候我们在写程序的过程中会发现一些非编程错误的问题,这样的问题很难直接分辨出来,但是我们可以用调试了一步一步的模拟程序运行的过程,来找出程序的错误,下面这篇文章主要给大家介绍了关于VS2019调试C语言程序(监视操作)的详细步骤,需要的朋友可以参考下
    2022-11-11
  • c++实现通用参数解析类示例

    c++实现通用参数解析类示例

    使用命令行执行程序的时候在程序后可跟多个参数列表,而main函数的argc和argv分别存储了相关的参数个数和参数内容,而循环输入相关的时候就需要用户自己来解析相关参数。以下代码用c++的方式实现了相关解析的封装,使用起来非常方便
    2014-03-03

最新评论