c语言的经典算法代码

简介: c语言进阶11-经典算法代码

重要算法一览
复制代码

include "stdio.h"

void main()
{
int a,b,c,i,n;
int x,y,z,count;
int day=10,num=1; //day表示天数从第十天逆推 num表示当天桃子的数量
float h=0.0005;
int ci=0;
while(1)
{
printf("\t\t==========经典算法==============\n");
printf("\t\t1、穷举法:百钱买百鸡\n");
printf("\t\t2、递推法:猴子吃桃子\n");
printf("\t\t3、迭代法:斐波那契数列非递归求法\n");
printf("\t\t4、迭代法:折纸超珠峰问题\n");
printf("\t\t0、退出\n");
printf("\t\t================================\n");
printf("请输入您的选择:");
scanf("%d",&n);
switch(n)
{//代码效果参考:http://www.zidongmutanji.com/zsjx/43131.html

        case 1:
               count=0;
               printf("\n某人有100元钱,要买100只鸡。公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只。\n问可买到公鸡,母鸡,小鸡各为多少只?\n\n");
               for(x=1;x<=20;x++)
               {
                        //
                    for(y=1;y<=33;y++)
                    {
                        for(z=1;z<=100;z++)
                        {
                            if(x+y+z==100 && 5*x+3*y+z/3==100&& z%3==0)
                            {
                                count++;
                                 printf("第%d种情况:公鸡%d只,母鸡%d只,小鸡%d只\n",count,x,y,z);
                            }
                        }
                    }
               }
               break;
        case 2:
               printf("有数量未知的桃子,猴子第一天吃了总数量的一半又多吃一个,\n第二天又吃了剩下的一半有多吃一个,依次类推,到第十天桃子的数量仅剩1个,\n问最初桃子的数量有多少?\n");
               while(day>1)
                   num=(num+1)*2;
                   day--;
               printf("桃子的数量是:%d个\n",num);

        case 3:
               a=b=1;
               printf("有一对兔子不吃不喝不会死,第三个月成熟,从成熟开始每月繁殖生下一对兔子,\n新生的每对兔子仍是第三个月成熟开始每月生一对兔子,那么每个月兔子的对数如何计算。\n其实这就是著名数列斐波那契数列如下:1 1 2 3 5 8 13 21 34 ......\n");
               printf("打印前20项的值:\n");
               printf("%d\t%d\t",a,b);
               for(i=3;i<=20;i++)
                    c=a+b;
                    printf("%d\t",c);
                    a=b;    
                    b=c;
                    if(i%5==0)
                        printf("\n");
               printf("\n");
        case 4:
               printf("一张纸厚度是0.5mm厚,珠峰的高度为8848.43米,\n问这张纸对折多少次后会超过珠峰的高度?\n");
               while(h<8848.43)
                      h=h*2;
                      printf("%.3f\t",h);
                      ci++;
                      if(ci%5==0)
                      {
                             printf("\n");
                      }

               printf("总计需要%d次后折纸超过珠峰的高度\n",ci);
        case 0:return;break;
        default:printf("输入有误\n");break;
    }
}

}
希尔法排序
/ Note:Your choice is C IDE /
int i,tem,j;
int arr[]={12,4,58,2,6,9,1,15,15,85,94,12,56};
int num,n;//
num=sizeof(arr)/sizeof(arr[0]);

for(i=0;i<num;i++)
    printf("%d    ",arr[i]);
printf("\n");
for(n=num/2;n>=1;n/=2){
for(i=n;i<num;i++)//从第一个到长度-1
     tem=arr[i];    
    for(j=i-n;arr[j]>tem&&j>=0;j=j-n){   
         arr[j+n]=arr[j];
        arr[j+n]=tem;

//代码效果参考:http://www.zidongmutanji.com/bxxx/525016.html

递归

include

/ 交换两个数据 /
void swap(char a, char b)
char c = a; a = b; b = c;
void perm(char str[], int index, int str_size)
int i = 0,j = 0;
if(index == str_size)
/ 输出当前的排列 /
for(i = 0; i < str_size; i++)
printf("%c ",str[i]);
printf("\n");
else
for(j = index;j < str_size; j++)//每次进行自增后经过递归输出一次结果
printf("%d %d\n",j,index);
swap(&str[j],&str[index]);
perm(str,index+1,str_size);//递归指导index=str_size
swap(&str[j],&str[index]);//将交换后的给交换回来,避免重复
char a[] = "abc";
perm(a,0,3);
披萨订购

include "string.h"

include "stdlib.h"

char name[20];
int p;//代表票数
float Allprice=0.0;//总价
void menu();
void tickts();
void groupby();
{
int bh;
for(;;){
menu();
printf("请输入功能编号:");
scanf("%d",&bh);
switch(bh){
case 1:tickts();break;
case 2:groupby();break;
case 0:exit(0);
default :printf("您输入的编号有误!");break;

void menu(){
printf("\t\t\t==== 比格披萨 ===\n");
printf("\t\t\t 1.普通票订购\n");
printf("\t\t\t 2.团购票订购\n");
printf("\t\t\t 0.退出\n");
void tickts(){
int i;//购票类型
int p,p1,p2[4],p3;//张数

char arr[20];
printf("\n\n\t\t\t===票务类型===\n");
printf("\t\t\t1.成人票(65元/位)\n");
printf("\t\t\t2.老人票(45元/位)\n");
printf("\t\t\t3.儿童票(30元/位)\n");
/*票价*/
p2[0]=0;
p2[1]=65;
p2[2]=45;
p2[3]=30;
printf("请输入订票您的姓名:");
gets(name);gets(name);

printf("请选择票务类型:");
scanf("%d",&i);
printf("请选择票数:");
scanf("%d",&p);
if(i==1){
strcpy(arr,"成人票");
}else if(i==2){
strcpy(arr,"老人票");
}else if(i==3){
strcpy(arr,"儿童票");
printf("顾客%s您好,您选择了:票务类型:%s  购票张数%d\n",name,arr,p);
Allprice+=Allprice;
Allprice=(float)p2[i]*p;
printf("信息确认请按:0/1");
scanf("%d",&p1);
if(p1==1){
    printf("核实信息后请支付票款%.2f元\n",Allprice);
    printf("是否继续订票0/1:");
    scanf("%d",&p3);
    if(p3==1){
        Allprice=0;
        continue;
}else if(p3==0){
break;
}else{
printf("输入数字错误!");
}else if(p1==0){
Allprice=0;
continue;

//代码效果参考:http://www.zidongmutanji.com/zsjx/50887.html
}//循环
}//最后
void groupby(){
float a,b;
printf("输入团购票数");
if(p<2){ printf("两张起订\n"); }else if(p>2){
Allprice=(float)p60;
printf("您需要支付%.2f",Allprice);
a=Allprice-(int)Allprice%100+100;
b=100-(int)Allprice%100;
printf("如果您支付%.2f元,那么我找给你%.2f元\n",a,b);
斐波那契代码
/
使用链表的方式来储存 */
//标准的输出库
//字符串的操作类
//
//定义全局步数
int step=0;
//m为盘子数,a,b,c分别为盘子名
void move(int m,char a,char b,char c){
if(m==1)
//第一步从a-c
printf("第%d步move 1 from %c To %c\n",step,a,c);
step++;
//(1)Move(n-1,A,B,C),理解为将上面的n-1纸盘子作为一个整体从A经C移至B
move(m-1,a,c,b);
//此时的a和c并不是()里的a和c
printf("第%d步move %d from %c To %c\n",step,m,a,c);
move(m-1,b,a,c);
char arr[]="hello world";
//s->String d->int c->char最好在前面加上一个空格 f->浮点型
move(3,'A','B','C');

相关文章
|
1月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
56 1
|
1月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
91 1
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
208 65
|
2天前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
15 4
|
19天前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
|
19天前
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
|
19天前
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
123 3
|
19天前
|
存储 算法 C语言
C语言手撕实战代码_二叉排序树(二叉搜索树)_构建_删除_插入操作详解
这份二叉排序树习题集涵盖了二叉搜索树(BST)的基本操作,包括构建、查找、删除等核心功能。通过多个具体示例,如构建BST、查找节点所在层数、删除特定节点及查找小于某个关键字的所有节点等,帮助读者深入理解二叉排序树的工作原理与应用技巧。此外,还介绍了如何将一棵二叉树分解为两棵满足特定条件的BST,以及删除所有关键字小于指定值的节点等高级操作。每个题目均配有详细解释与代码实现,便于学习与实践。
|
19天前
|
存储 算法 C语言
C语言手撕实战代码_二叉树_构造二叉树_层序遍历二叉树_二叉树深度的超详细代码实现
这段代码和文本介绍了一系列二叉树相关的问题及其解决方案。其中包括根据前序和中序序列构建二叉树、通过层次遍历序列和中序序列创建二叉树、计算二叉树节点数量、叶子节点数量、度为1的节点数量、二叉树高度、特定节点子树深度、判断两棵树是否相似、将叶子节点链接成双向链表、计算算术表达式的值、判断是否为完全二叉树以及求二叉树的最大宽度等。每道题目均提供了详细的算法思路及相应的C/C++代码实现,帮助读者理解和掌握二叉树的基本操作与应用。
|
19天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。