如何用c语言找出数组最小值帕多瓦数列中任意数用循环

17:26 提问
斐波那契数列 利用循环输出前40项 (初学者)
我在查了资料之后找到以下解决方法:
  int main()
  long fib[41] = {0,1};
  for (i=2;i&41;i++) fib[i] = fib[i-1]+fib[i-2];
  for (i=1;i&41;i++) printf("F%d==%d\n",i,fib[i]);
  getch();
  return 0;
有些看不懂,希望可以帮我详细分析一下运算过程,或者提供相关的知识点以供研究。
按赞数排序
首先你要知道斐波那契数列的规律也就是0、1、1、2、3、5、8、13、21、……,通过这个就可以知道从第三个元素开始,他的值等于前面两个元素的和,下面分析代码
long fib[41] = {0,1};
定义了一个数组,设置了0 1 坐标元素的值为 0 1
for (i=2;i&41;i++) fib[i] = fib[i-1]+fib[i-2];
这个循环是冲i等于2开始运算的,也就是数组的第三个元素,fib[i] = fib[i-1]+fib[i-2]
因为斐波那契数列的规律是从第三个元素开始等于前面两个相加,也就是fib[i-1],fib[i-2]这两个
for (i=1;i&41;i++) printf("F%d==%d\n",i,fib[i]); 这里是打印,上面的代码可以看出,数组第一个和第二个元素没有参与运算,但long fib[41] = {0,1};这里已经声明了,所以第一个第二个元素固定为0、1,第三个开始就是前面两个相加。
不知道说的详细不详细,你明白不明白。
这样实现的效率不高,计算40项表现不出来,如果计算400项的时候,那就会发现非常慢。
long main(int n){
if(n & 1){
long a = 0, b = 1;
long temp =
}while(--n & 1);
看是简单的“杯子倒水”、看是没有什么技术含量,但是他的效率绝对比迭代来得高。
这个是迭代法,如果你想要深入探讨的话,可以去研究高效的矩阵乘法。
long a = 0;
long b = 1;
int count = 40;
for (int i = 0; i & (count+1)/2; i++) {
这样效率更高些
其他相似问题本帖子已过去太久远了,不再提供回复功能。共有 2698 人关注过本帖
标题:任意输入一组数列,求出不相邻的两个数和的最大值。新手第高手帮一下
等 级:论坛游民
帖 子:34
专家分:16
结帖率:60%
&&已结贴√
&&问题点数:10&&回复次数:18&&&
任意输入一组数列,求出不相邻的两个数和的最大值。新手第高手帮一下
任意输入一组数列,求出不相邻的两个数和的最大值。新手第高手帮一下
搜索更多相关主题的帖子:
来 自:广东潮州
等 级:小飞侠
帖 子:1181
专家分:2784
...............................你真厉害.............这么经典啊&&& !!!!!!
一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,&&QQ群
来 自:魔術の禁書目錄
等 级:小飞侠
帖 子:952
专家分:2929
找出前三大,如果有并列第三大的,那就和没有并列第三大分两种大情况,然后这个题目就能解决了
永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
等 级:论坛游民
帖 子:34
专家分:16
回复 3楼 御坂美琴
是不是先用冒泡法找出最大的三个数呀
来 自:陕西西安
等 级:小飞侠
帖 子:705
专家分:2271
这个问题无需找前三大吧??这个问题是跟找最大值有些类似的问题啊!!
---------------------------------------------------------
解题思路:
假设输入的一组数列存放于数组a中,共n个数
最大值max初始为a[0]+a[2]
用个二层循环:
for(i=0;i&n-2;i++)
&&& for(j=i+2;j&n;j++)
&&&&&&&&if(max&a[i]+a[j])max=a[i]+a[j];
则题目要求的最大值就有了啊!&&&&&&
[ 本帖最后由 jack10141 于
00:07 编辑 ]
Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
等 级:业余侠客
帖 子:146
专家分:210
楼上的就是高
来 自:魔術の禁書目錄
等 级:小飞侠
帖 子:952
专家分:2929
以下是引用jack10141在 23:57:25的发言:
这个问题无需找前三大吧??这个问题是跟找最大值有些类似的问题啊!!
---------------------------------------------------------
解题思路:
假设输入的一组数列存放于数组a中,共n个数
最大值max初始为a[0]+a[2]
用个二层循环:
for(i=0;i&n-2;i++)
&&& for(j=i+2;j&n;j++)
&&&&&&&&if(max&a+a[j])max=a+a[j];
则题目要求的最大值就有了啊!&&&&&&
这个和找前三大的办法的区别是,时间级别上差了一个n
楼主没有说这个n最大多大,那么如果n有10000个,那这个时间差就很巨大了
永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
来 自:广东肇庆怀集
等 级:业余侠客
帖 子:174
专家分:257
回帖得分顺便学习下,新手。
来 自:陕西西安
等 级:小飞侠
帖 子:705
专家分:2271
以下是引用御坂美琴在 00:23:46的发言:
这个和找前三大的办法的区别是,时间级别上差了一个n
楼主没有说这个n最大多大,那么如果n有10000个,那这个时间差就很巨大了不是吧?我还真没有没有考虑过运行时间复杂度的问题。。。
但是要找前三大,你用什么办法找呢??可否给个代码或者详细解题办法大家参考下??
[ 本帖最后由 jack10141 于
18:27 编辑 ]
Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
等 级:论坛游民
帖 子:13
专家分:39
&&得分:10&
说到只要知道前几大的数,我写了个代码:
#include &stdio.h&
typedef struct mlist
mlist ml[20];
void ml_push(int n)
&&& ml[cnt_ml].n =
&&& ml[cnt_ml].flag = 0;
&&& cnt_ml++;
&&& while (cnt_ml & 10)
&&&&&&&&int nmin = -1,
&&&&&&&&for (n=0; n&cnt_ n++)
&&&&&&&&&&&&if (ml[n].flag==0 && (nmin == -1 || ml[n].n&ml[nmin].n))
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& nmin =
&&&&&&&&&&&&}
&&&&&&&&ml[n=nmin].flag = 1;
&&&&&&&&while (nmin&0 && ml[nmin-1].flag)
&&&&&&&&&&&&nmin--;
&&&&&&&&while (n&cnt_ml && ml[n].flag)
&&&&&&&&&&&&n++;
&&&&&&&&if(nmin)++
&&&&&&&&for (; n&cnt_ ++n, ++nmin)
&&&&&&&&&&&&ml[nmin] = ml[n];
&&&&&&&&cnt_ml =
int main()
&&& while (scanf(&%d&, &n)!=EOF)
&&&&&&&&int s, t=0;
&&&&&&&&cnt_ml = 0;
&&&&&&&&for (; t&n; ++t)
&&&&&&&&&&&&scanf(&%d&, &s);
&&&&&&&&&&&&ml_push(s);
&&&&&&&&for (t=0; t&cnt_ ++t)
&&&&&&&&&&&&if (ml[t].flag)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& printf(&_ &);
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& printf(&%d &, ml[t].n);
&&&&&&&&&&&&}
&&&&&&&&puts(&&);
&&& return 0;
例如,输入:
1 23 4 56 7 8 9 10 24 31 2 35 2 33 46 24 41 21 22 1
第一个数表示下一行要输入20个数,
然后程序会输出
56 _ 35 _ 33 46 _ 41 _
下横线表示中间有一串数字忽略掉
这样,就会保留下最大的五个数,并且复杂度是线性的,所用的内存空间也很小,只开了个20的数组
之后再套用那个二重循环的代码,就能以非常快的速度算出答案了
不过不知道这个代码是不是一定对的,但我觉得只要留下前五大就足够了,甚至可能只需要前四大的数,不知道有没有反例呢
my name is liqin
版权所有,并保留所有权利。
Powered by , Processed in 0.021550 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights Reserved

我要回帖

更多关于 c语言找出最小值 的文章

 

随机推荐