几种常见的算法源代码C语言版

合集下载

C语言常用算法程序汇总

C语言常用算法程序汇总

C语言常用算法程序汇总C语言是一门广泛应用于计算机编程的语言,具有较高的效率和灵活性。

在C语言中,常见的算法程序包括排序算法、查找算法、递归算法等等。

以下是一些常用的C语言算法程序的汇总:1.排序算法:-冒泡排序:通过多次迭代比较相邻元素并交换位置,将最大的元素逐渐移动到正确的位置。

-插入排序:将待排序的元素与已排序的部分依次比较并插入到正确的位置。

-选择排序:每次从待排序的元素中选择最小的元素并与已排序的部分交换位置。

-快速排序:通过选择一个基准元素,将数组划分为两个子数组进行递归排序。

2.查找算法:-顺序查找:逐个比较数组中的元素,直到找到目标元素或到数组末尾。

-二分查找:通过比较目标元素与数组中间元素的大小,逐步缩小范围,直到找到目标元素。

-哈希查找:通过散列函数将目标元素映射到哈希表的索引位置进行查找。

3.递归算法:-阶乘:通过递归调用自身计算一个正整数的阶乘。

-斐波那契数列:通过递归调用自身计算斐波那契数列的第n个数。

-二叉树遍历:通过递归调用自身遍历二叉树的各个节点。

4.图算法:- 最短路径算法:如Dijkstra算法和Floyd算法,用于计算图中两个节点之间的最短路径。

-拓扑排序:通过对有向无环图进行排序,使得所有的边从排在前面的节点指向排在后面的节点。

- 最小生成树:如Prim算法和Kruskal算法,用于找到图中连接所有节点的最小子树。

5.动态规划:-最长公共子序列:通过寻找两个字符串中的最长公共子序列,解决字符串匹配问题。

-背包问题:通过动态规划解决在给定容量下选取物品使得总价值最大的问题。

-最大子序列和:通过动态规划解决一个数组中选取连续子序列使得和最大的问题。

以上只是一些C语言中常用的算法程序的汇总,实际上,还有很多其他的算法,如逆波兰表达式、霍夫曼编码、最小割等等。

通过学习这些算法,可以更好地理解C语言的应用和开发。

贪心算法几个经典例子c语言

贪心算法几个经典例子c语言

贪心算法几个经典例子c语言1. 零钱兑换问题题目描述:给定一些面额不同的硬币和一个总金额,编写一个函数来计算可以凑成总金额所需的最少的硬币个数。

如果没有任何一种硬币组合能够凑出总金额,返回 -1。

贪心策略:每次选择面额最大的硬币,直到凑出总金额或者无法再选择硬币为止。

C语言代码:int coinChange(int* coins, int coinsSize, int amount){int count = 0;for(int i = coinsSize - 1; i >= 0; i--){while(amount >= coins[i]){amount -= coins[i];count++;}}return amount == 0 ? count : -1;}2. 活动选择问题题目描述:有 n 个活动,每个活动都有一个开始时间和结束时间,选择一些活动使得它们不冲突,且能够参加的活动数最多。

贪心策略:每次选择结束时间最早的活动,直到所有活动都被选择或者无法再选择为止。

C语言代码:typedef struct{int start;int end;}Activity;int cmp(const void* a, const void* b){return ((Activity*)a)->end - ((Activity*)b)->end;}int maxActivities(Activity* activities, int n){qsort(activities, n, sizeof(Activity), cmp);int count = 1;int end = activities[0].end;for(int i = 1; i < n; i++){if(activities[i].start >= end){count++;end = activities[i].end;}}return count;}3. 跳跃游戏题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。

C语言常用算法程序汇总

C语言常用算法程序汇总

C程序设计的常用算法算法(Algorithm):计算机解题的基本思想方法和步骤。

算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。

通常使用自然语言、结构化流程图、伪代码等来描述算法。

一、简单数值类算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。

1、求阶乘:n!=1*2*384…..*n; n!= n*(n-1)!=下列程序用于求n的阶乘.在累乘之前,一定要将用于存放乘积的变量的值初始化为1.long func(int n){int i;long t=1;for(i=2;i<=n;i++)t*=i;return t;}printf("\n");}main(){ int n;scanf("%d", &n);printf("n!=%ld\n", fac(n));}2、整数拆分问题:把一个整数各个位上的数字存到数组中#define N 4 /* N代表整数位数*/viod split(int n, int a[ ])/* 1478: a[ 3]=8, a[2 ]=7, a[1 ]=4…*/{int i;for(i=N-1;i!=0; i--){ a[i]=n%10;n=n/10;}}main(){int i,m=1478,b[N-1];split(m, b);for(i=0;i<4; i++)printf(“%5d”, b[i]);}3、求整数的因子之和12=1*2*3*4 long factor(int n){int i;long sum=0;for(i=1;i<=n;i++)if(n%i= =0)sum+=i;return sum;}注意:因子包括1和自身。

C语言基础简单的数学运算的代码

C语言基础简单的数学运算的代码

C语言基础简单的数学运算的代码#include <stdio.h>int main() {// 定义并初始化变量int num1 = 10;int num2 = 5;// 加法运算int sum = num1 + num2;printf("加法运算结果:%d\n", sum);// 减法运算int difference = num1 - num2;printf("减法运算结果:%d\n", difference);// 乘法运算int product = num1 * num2;printf("乘法运算结果:%d\n", product);// 除法运算float quotient = (float)num1 / num2;printf("除法运算结果:%.2f\n", quotient);// 求余运算int remainder = num1 % num2;printf("求余运算结果:%d\n", remainder);return 0;}以上是一个简单的C语言程序,实现了基本的数学运算功能。

程序运行后,会输出每个数学运算的结果。

接下来我会逐行解释代码的含义和执行过程。

首先,在程序的开头我们使用了#include <stdio.h>这行代码,这是为了包含C语言标准库中的输入输出函数,以便后续可以使用printf()函数打印结果。

接着,在main()函数中,我们定义并初始化了两个整型变量num1和num2,分别赋值为10和5。

这两个变量代表了我们要进行数学运算的两个操作数。

然后,我们使用加法运算将num1和num2相加得到sum,并使用printf()函数打印出加法运算的结果。

接着,我们使用减法运算将num1减去num2得到difference,并使用printf()函数打印出减法运算的结果。

C语言入门必学—10个经典C语言算法

C语言入门必学—10个经典C语言算法

C语言入门必学—10个经典C语言算法C语言是一种广泛使用的编程语言,具有高效、灵活和易学的特点。

它不仅在软件开发中被广泛应用,也是计算机科学专业的必修课。

在学习C语言的过程中,掌握一些经典的算法是非常重要的。

本文将介绍10个经典C语言算法,帮助读者更好地了解和掌握C语言。

一、冒泡排序算法(Bubble Sort)冒泡排序算法是最简单、也是最经典的排序算法之一。

它通过不断比较相邻的元素并交换位置,将最大(或最小)的元素逐渐“冒泡”到数组的最后(或最前)位置。

二、选择排序算法(Selection Sort)选择排序算法是一种简单但低效的排序算法。

它通过不断选择最小(或最大)的元素,并与未排序部分的第一个元素进行交换,将最小(或最大)的元素逐渐交换到数组的前面(或后面)。

三、插入排序算法(Insertion Sort)插入排序算法是一种简单且高效的排序算法。

它通过将数组分为已排序和未排序两个部分,依次将未排序部分的元素插入到已排序部分的合适位置。

四、快速排序算法(Quick Sort)快速排序算法是一种高效的排序算法。

它采用了分治的思想,通过将数组分为较小和较大两部分,并递归地对两部分进行排序,最终达到整个数组有序的目的。

五、归并排序算法(Merge Sort)归并排序算法是一种高效的排序算法。

它采用了分治的思想,将数组一分为二,递归地对两个子数组进行排序,并将结果合并,最终得到有序的数组。

六、二分查找算法(Binary Search)二分查找算法是一种高效的查找算法。

它通过不断将查找范围折半,根据中间元素与目标值的大小关系,缩小查找范围,最终找到目标值所在的位置。

七、递归算法(Recursive Algorithm)递归算法是一种通过自我调用的方式解决问题的算法。

在C语言中,递归算法常用于解决树的遍历、问题分解等情况。

八、斐波那契数列算法(Fibonacci Sequence)斐波那契数列是一列数字,其中每个数字都是前两个数字的和。

c语言五则运算代码

c语言五则运算代码

c语言五则运算代码C语言是一种广泛应用于计算机编程的编程语言,它具有灵活、高效的特点,常被用于进行各种数学计算和表达式求值。

本文将围绕C语言的五则运算(加法、减法、乘法、除法、取余)展开,探讨其在实际编程中的应用。

一、加法运算加法运算是最基本的数学运算之一,在C语言中使用加号(+)来表示。

在实际编程中,加法运算常用于计算两个数的和。

例如,我们可以编写一个程序,实现输入两个数并计算它们的和:```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);sum = a + b;printf("它们的和为:%d\n", sum);return 0;}```二、减法运算减法运算是计算两个数之差的操作,在C语言中使用减号(-)来表示。

我们可以编写一个程序,实现输入两个数并计算它们的差:```c#include <stdio.h>int main() {int a, b, difference;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);difference = a - b;printf("它们的差为:%d\n", difference);return 0;}```三、乘法运算乘法运算是计算两个数的积的操作,在C语言中使用星号(*)来表示。

我们可以编写一个程序,实现输入两个数并计算它们的积:```c#include <stdio.h>int main() {int a, b, product;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);product = a * b;printf("它们的积为:%d\n", product);return 0;}```四、除法运算除法运算是计算两个数的商的操作,在C语言中使用斜杠(/)来表示。

c语言入门源代码

c语言入门源代码

c语言入门源代码C语言作为一种非常流行和广泛应用的编程语言,在计算机科学领域发挥了重要作用。

掌握C语言编程的基本知识和技能是初学者的首要任务。

本文将为你提供一些C语言入门的源代码示例,帮助你更好地理解和掌握C语言编程。

代码示例一:Hello World#include <stdio.h>int main() {printf("Hello World!\n");return 0;}这是一个经典的C语言程序,用于向屏幕输出"Hello World!"。

在C 语言中,使用printf函数来实现输出操作。

其中,"\n"表示换行符,用于使输出在新的一行显示。

代码示例二:求和#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:\n");scanf("%d%d", &num1, &num2);sum = num1 + num2;printf("两个数的和为:%d\n", sum);return 0;}这段代码演示了如何实现两个整数的求和。

首先,使用printf函数提示用户输入两个整数。

接下来,使用scanf函数从用户处获取输入的整数值,并将它们分别赋给num1和num2变量。

然后,将num1和num2变量相加得到sum变量的值,并使用printf函数输出结果。

代码示例三:判断奇偶数#include <stdio.h>int main() {int num;printf("请输入一个整数:\n");scanf("%d", &num);if(num % 2 == 0) {printf("%d是偶数。

\n", num);}else {printf("%d是奇数。

C语言经典算法100例

C语言经典算法100例

C语言经典算法100例(1)(2007-08-15 15:09:22)C 语言编程经典 100 例【程序1】题目:有1、2、3、4个数字,能组成多少个互不一样且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){int i,j,k;printf(“\n“);for(i=1;i〈5;i++) /*以下为三重循环*/for(j=1;j〈5;j++)for (k=1;k〈5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不一样*/printf(“%d,%d,%d\n“,i,j,k);}}【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的局部按10%提成,高于10万元的局部,可可提成7.5%;20万到40万之间时,高于20万元的局部,可提成5%;40万到60万之间时高于40万元的局部,可提成3%;60万到100万之间时,高于60万元的局部,可提成1.5%,高于100万元时,超过100万元的局部按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld“,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i〈=100000)bonus=i*0.1;else if(i〈=200000)bonus=bonus1+(i-100000)*0.075;else if(i〈=400000)bonus=bonus2+(i-200000)*0.05;else if(i〈=600000)bonus=bonus4+(i-400000)*0.03;else if(i〈=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(“bonus=%d“,bonus);}【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几种常见的算ห้องสมุดไป่ตู้源代码 C 语言版
1. 回溯法 (背包问题) #include<stdio.h> bool Contains(int t,int n,int x[],int weight[],int maxweight) { int countweight=0; for(int i=1;i<=t;i++) { countweight+=x[i]*weight[i]; } if(countweight<=maxweight) return true; else return false; } bool Bound() { return true; } void Backtrack(int t,int n,int x[],int weight[],int value[],int maxweight) { if(t>n) { int countvalue=0; for(int i=1;i<=n;i++) { countvalue+=x[i]*value[i]; printf("%4d",x[i]); } printf(" 总价值为:%d\r\n",countvalue); } else { for(int i=0;i<=1;i++) { x[t]=i; if(Contains(t,n,x,weight,maxweight)&&Bound()) Backtrack(t+1,n,x,weight,value,maxweight);
第 5/6 页
scanf("%d",&s); a[i]=s; } printf("请输入要取出来的数的个数(不超过 5):\r\n"); scanf("%d",&n); Composition(a,b,m,n); }

6/6


4/6

void Composition(int source[],bool templete[],int n,int m) { for(int i=0;i<m;i++) templete[i]=true; for(int j=m;j<n;j++) templete[j]=false; PrintComposition(source,templete,n); count++; while(true) { for(int i=0;i<n;i++) { if(templete[i]==true&&templete[i+1]==false)break; } if(i==n)return; templete[i]=false; templete[i+1]=true; int p=0; while(p<i) { while(templete[p]==true)p++; while(templete[i]==false)i--; if(p<i) { templete[p]=true; templete[i]=false; } } PrintComposition(source,templete,n); count++; } } void main() { int a[5]; bool b[5]; printf("请输入要进行组合的数的个数(不超过 5):\r\n"); int m,n; scanf("%d",&m); //printf("请输入要%d 个数:\r\n"m); for(int i=0;i<m;i++) { int s;
第 1/6 页
} } } void main() { int n,maxweight,a[50],weight[50],value[50]; printf("请输入物品的总个数:"); scanf("%d",&n); printf("\r\n 请分别输入%d 个物品的重量:\r\n",n); for(int i=1;i<=n;i++) { scanf("%d",&weight[i]); } printf("请分别输入%d 个物品的价值:\r\n",n); for(int j=1;j<=n;j++) { scanf("%d",&value[j]); } printf("请输入背包所能容纳物品的最大重量:"); scanf("%d",&maxweight); printf("\r\n"); Backtrack(1,n,a,weight,value,maxweight); } 2. 全排列 (未考虑重复元素) #include<stdio.h> void Swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } void Perm(int num[],int k,int m) { if(k==m) { for(int i=0;i<=m;i++) printf("%4d",num[i]); printf("\n"); }
第 3/6 页
for(int i=k;i<=m;i++) { if(num[i]==num[k]&&i!=k) continue; else { Swap(num[i],num[k]); Perm(num,k+1,m); Swap(num[i],num[k]); } } } } void main() { int a[5]; int m,n; printf("请输入要进行全排列的数的个数(不能超过 5) :\r\n"); scanf("%d",&m); printf("请输入%d 个整数(可重复) :\r\n",m); for(int i=0;i<m;i++) { scanf("%d",&n); a[i]=n; } Perm(a,0,m-1); } 4. 组合(递归实现) #include<stdio.h> void PrintComposition(int source[],bool templete[],int n) { for(int i=0;i<n;i++) { if(templete[i]==true) printf("%3d",source[i]); } printf("\r\n"); } int count=0;
第 2/6 页
else { for(int i=k;i<=m;i++) { Swap(num[k],num[i]); Perm(num,k+1,m); Swap(num[k],num[i]); } } } void main() { int a[100]; printf("请输入要进行全排列的个数:\r\n"); int n; scanf("%d",&n); for(int i=0;i<n;i++) a[i]=i+1; printf("%d 个数的全排列如下:\r\n",n); Perm(a,0,n-1); } 3. 全排列 (考虑重复元素) #include<stdio.h> void Swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } void Perm(int num[],int k,int m) { if(k==m) { for(int i=0;i<=m;i++) printf("%4d",num[i]); printf("\r\n"); } else {
相关文档
最新文档