大一上学期算法学习总结

在大一上学期,我学习了《C语言程序设计教程》一书,对C语言有了初步的了解与学习。因此我接下来汇报的算法都将用c语言实现。当然,这些算法比较容易理解应用。我将以此作为基础,在第二学期继续努力,学习更多算法。

一、冒泡法排序

(关于排序还有选择法,个人感觉比冒泡要更容易,就不单独列出了。)

冒泡排序需要重复地走访过要排序的元素列,依次挨个比较两个相邻的元素,将顺序错误的两个元素交换从而达到排序目的。

例:随机输入十个数,按从小到大排序后输出

int main()    
{
    int a[10];
    int i,j,t;
    printf("输入十个数:");
    for(i=0;i<10;i++)
    {scanf("%d",&a[i]);}
    for(j=0;j<9;j++)
        for(i=0;i<9-j;i++)
            {if(a[i]>a[i+1])
                {t=a[i];a[i]=a[i+1];a[i+1]=t;}}
    printf("排序后:");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

二、递推法

递推法需要通过已知条件,利用特定关系得出中间推论,再由中间推论一步步得到结果。

例:猴子吃桃子问题。小猴有桃若干,每天吃掉现有数的一半多一个,到第7天要吃时只剩下一个了,问小猴从第一天到第七天,每天桃子多少个?

在这个问题中,已知条件为第7天的桃子数量为1个,因此可以设第n天的桃子为x,它是前一天的桃子数的一半少1个,则有前一天桃子数量为2(x+1)个,即题目中的特定关系。

#include<stdio.h>
#include<math.h>
int main()
{
    int d,x;
     d=7,x=1;
    for(;d>=1;d--) 
    {printf("第%d天的桃子数为:%d\n",d,x);
    x=(x+1)*2;
}
    return 0; 
}

三、穷举法

例:有36块砖,一共有36人可以搬。男人一次搬4块,女人一次搬3块,两个小孩只能搬一块砖,若要求一次全搬完,问需要男、女、小孩各若干。

全部搬完,如只有男人,则需要12名。则男人人数范围为0-12名,同理女性。

在这个问题中穷举法的过程便是将男人0-12名、女人0-12名的各种情况列举出来,小孩人数则是通过总人数-男女人数计算得出,直到满足“一次搬完”条件穷举结束。

#include<stdio.h>
int main()
{
    int m,w,c;
    for(m=0;m<=12;m++)
        for(w=0;w<=12;w++)
        {c=36-m-w;
         if(m*4+w*3+c*0.5==36)
        printf("需要男人:%d 名,女人:%d 名,小孩:%d 名 \n",m,w,c);
        }
    return 0;
}

四、递归法

同样以猴子吃桃为例:猴子摘了若干桃子,每天吃现有桃子数的一半多一个,第7天早上只剩下1个桃子,问猴子一共摘了多少个桃子?

分析题目,可以得到信息:

n=1时 ,f ( n ) = 1;

n<7时, f ( n )= 2 * ( f ( n + 1 ) + 1 )

#include <stdio.h>
int peach(int d)
{int x = 1;
 if (d == 7){x = 1;}
 else
    {x = (2*(peach(d+1)+1));}
    return x;
}

int main()
{
    int d = 1,sum = 0;
    sum = peach(d);
    printf("%d\n", sum);
    return 0;
}

以上为我在大一上学期学到的一些印象深刻的算法,这些算法让我能够较好完成专业课老师布置的作业,让我收获良多。但同时我也清楚的认识到自己目前的水平远远不够。因此我计划在第二学期学习更多专业知识,学习并实现更多算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值