当前位置:首页 » 编程语言 » c语言常见算法题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言常见算法题

发布时间: 2022-05-22 12:52:15

c语言算法题目求解

首先穷举每一个起点,对于每一个起点,当后一个元素比前一个元素相差不超过一的时候就不停的后移。退出内循环之后,检查终点和起点之间的距离,如大于已知的最大长度,就更新最大长度值。整个循环结束后输出最大长度值就可以了。

下面是程序的源代码和运行的截图。

#include<stdio.h>
#include<math.h>
int main()
{ int i,j,maxlen=1,a[5]= {1,2,6,7,7};
for(i=0; i<=5-maxlen; i++)
{ for(j=i+1; abs(a[j]-a[j-1])<=1; j++);
if(j-i>maxlen)maxlen=j-i;
}
printf("%d ",maxlen);
return 0;
}

② c语言常用算法有哪些

0) 穷举法
穷举法简单粗暴,没有什么问题是搞不定的,只要你肯花时间。同时对于小数据量,穷举法就是最优秀的算法。就像太祖长拳,简单,人人都能会,能解决问题,但是与真正的高手过招,就颓了。
1) 贪婪算法
贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的好坏要看贪婪策略的选择。特点就是简单,能获取到局部最优解。就像打狗棍法,同一套棍法,洪七公和鲁有脚的水平就差太多了,因此同样是贪婪算法,不同的贪婪策略会导致得到差异非常大的结果。
2) 动态规划算法
当最优化问题具有重复子问题和最优子结构的时候,就是动态规划出场的时候了。动态规划算法的核心就是提供了一个memory来缓存重复子问题的结果,避免了递归的过程中的大量的重复计算。动态规划算法的难点在于怎么将问题转化为能够利用动态规划算法来解决。当重复子问题的数目比较小时,动态规划的效果也会很差。如果问题存在大量的重复子问题的话,那么动态规划对于效率的提高是非常恐怖的。就像斗转星移武功,对手强它也会比较强,对手若,他也会比较弱。
3)分治算法
分治算法的逻辑更简单了,就是一个词,分而治之。分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。分治算法是递归的典型应用。
4) 回溯算法
回溯算法是深度优先策略的典型应用,回溯算法就是沿着一条路向下走,如果此路不同了,则回溯到上一个
分岔路,在选一条路走,一直这样递归下去,直到遍历万所有的路径。八皇后问题是回溯算法的一个经典问题,还有一个经典的应用场景就是迷宫问题。
5) 分支限界算法
回溯算法是深度优先,那么分支限界法就是广度优先的一个经典的例子。回溯法一般来说是遍历整个解空间,获取问题的所有解,而分支限界法则是获取一个解(一般来说要获取最优解)。

③ C语言 算法题

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
int data[100000];
int dp[100000];
int num;
bool Change(string s)
{

for(int i=0;i<s.size()+1;)
{
if(s[i]<='9'&&s[i]>='0')
{
int t=0;
while(s[i]<='9'&&s[i]>='0')
{
t=t*10+s[i]-'0';
i++;
}
data[num++]=t;
}
else if(s[i]==' '||i==s.size())
{

i++;
continue;
}
else{
return false;
}
}
return true;
}
int main()
{
string s;
while(getline(cin,s))
{
num=0;
bool flag=Change(s);
if(!flag)
{
cout<<"ERROR"<<endl;
continue;
}
/* for(int i=0;i<num;i++)
{
cout<<data[i]<<" ";
}*/
memset(dp,0,sizeof(dp));
int sum=0;
for(int i=0;i<num;i++)
{
sum+=data[i];
}
int half=sum/2;
// cout<<half<<endl;
for(int i=0;i<num;i++)
{
for(int j=half;j>=data[i];j--)
{
dp[j]=max(dp[j],dp[j-data[i]]+data[i]);
}
}
cout<<sum-dp[half]<<" "<<dp[half]<<endl;
}
}

④ c语言的一些算法问题。

1。递归法求阶层源程序如下:
int jc(int x)
{
if (x==0|x==1)
return 1;
else
return x*jc(x-1);
}
main()
{
int n;
scanf("%d",&n);
printf("%d!=%d",n,jc(n));
}

2。输入一组数据,按大小排列输出。
解:源程序如下:
#include <stdio.h>
main()
{
int s[10],t;
int i,j;
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<9;i++)
for (j=i+1;j<10;j++)
if (s[i]>s[j])
{
t=s[j];
s[j]=s[i];
s[i]=t;
}
for (i=0;i<10;i++);
printf("%3d",a[i]);
}

3。fibonacci数列前N项之和,要求N由键盘输入。
递归法求阶层源程序如下:
int fib(int x)
{
if (x==0|x==1)
return 1;
else
return fib(x-1)+fib(x-2);
}
main()
{
int n;
scanf("%d",&n);
printf("%d=%d",n,fib(n));
}

⑤ c语言问题: 什么是算法试从日常生活中找3个例子,描述它们的算法。 详细点,谢谢!

c语言中的算法是指:一系列解决问题的清晰指令,用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。通俗说就是解决问题的方法和步骤。

描述算法的例子:

  1. 问题:从上海去到北京。

    其中的算法:做汽车、做飞机、或者徒步。

  2. 问题:喝茶。

    其中的算法:先找到茶叶,再烧一壶开水,然后将茶叶放到杯子里,将开水倒入杯中,等茶叶泡好。

  3. 问题:开车。

    其中的算法:首先要打开车门,驾驶员坐好,插上车钥匙,发动汽车。

⑥ c语言中什么是算法有哪些描述算法的例子

1、有穷性(有限性)。任何一种提出的解题方法都是在有限的操作步骤内可以完成的。
如果在有限的操作步骤内完不成,得不到结果,这样的算法将无限的执行下去,永远不会停止。除非手动停止。例如操作系统就不具有有穷性,它可以一直运行。
2、一个算法应该具有以下七个重要的特征:
1)有穷性(finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止
2)确切性(definiteness)
算法的每一步骤必须有确切的定义;
3)输入项(input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
4)输出项(output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果.没有输出的算法是毫无意义的;
5)可行性(effectiveness)
算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成;
6)
高效性(high
efficiency)
执行速度快,占用资源少;
7)
健壮性(robustness)
健壮性又称鲁棒性,是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。

⑦ c语言算法

离散数学离散数学作为计算机学科的基础是竞赛中涉及最多的数学分支,重中之重又在于图论和组合数学,尤其是图论。图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。组合数学竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。数论以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。计算几何计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括—线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。线性代数对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。 ~

⑧ C语言算法题..

没有深奥算法,排列组合和数的拆分……
主要写一个组合的函数,还有阶乘的函数

long Fac(int k)
{
long ans=1;
//work 简单的就不写了吧
}

/* ___
/ a
| 就组合啊,看得懂就行。
\ ___ b
*/
long Com(int a,int b)
{
long ans=1;
//work 简单的就不写了吧
return ans;
}

int main()
{
scanf("%d",&t);
for (i=0;i@=t;i++)
{
long ans=0;
scanf("%d %d",&n,&m);
//...
//work!
/*
主要一个数的拆分,把n分成m个数,不可以拆成0,一个递归深搜啊拆就可以了,把拆好的数放在数组num[]中,然后,就开始组合计算。这个组合计算有点复杂,举一个例子吧
比如6分到3房
分的数先大后小的,不要
分成4,1,1(因为有2个相同):Com(4,6)*Com(1,2)*Com(1,1)/Fac(2)=15
分成3,2,1(因为都不相同 ):Com(3,6)*Com(2,3)*Com(1,1)/Fac(1)=60
分成2,2,2(因为有3个相同):Com(2,6)*Com(2,6)*Com(2,6)/Fac(3)=15
15+60+15得出90。
这个就是答案。
*/
//...
printf("&ld",ans);
}
}

简单的就自己写了,,,希望帮到你啊

⑨ c语言算法题

按你要求空瓶倒

#include<stdio.h>
intmain()
{
intnum[3],numSave,i,j;
printf("请输入3个数:");
scanf("%d%d%d",&num[0],&num[1],&num[2]);

for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
if(num[i]>num[j])
{
numSave=num[i];
num[i]=num[j];
num[j]=numSave;
}

}
}
printf("从小到大排列:%d%d%d",num[0],num[1],num[2]);
return0;
}

⑩ C语言经典题目

最短时间是这样的
以本例子说
最快2人过
时间2
最快人回
时间1
最慢2人过
时间10
最快人回
时间2
最快2人过
时间2
一共17
算法就是这样过河以最快2人和最慢2人交替进行,回来时候都是对岸最快的人回来。
ps:这个是哪里的ACM?
这样写出代码不难吧。
就是先将时间排序,然后按上面算法计算。