鱼C论坛

 找回密码
 立即注册
查看: 1974|回复: 10

一位数组折半法

[复制链接]
发表于 2013-12-14 19:46:15 | 显示全部楼层 |阅读模式
15鱼币
本帖最后由 Ъγ:_小ツ雨oο 于 2013-12-14 20:00 编辑
#include<stdio.h>
#define M 20
void main()
{
        int a[20]={1,1};
        int b[M],low=0,mid,high=b[M-1],n,found;
        int i;
        for(i=2;i<20;i++)
        {
                a[i]=a[i-1]+a[i-2];               

        }
        for(i=0;i<20;i++)
        {
                b[M]=a[i];
                printf("%6d",a[i]);
        }
        printf("\n"); 
         //上面表示20个斐波那契数,打印出来;;

        printf("下面是折半法\n");
        scanf("%d",&n);  //n表示输入的数;;
        while(low<=high)
        {
                mid=(low+high)/2;
                if(n==b[mid])
                {
                        found=1;
                        break;
                }
                else if(n>b[mid])
                {
                        low=mid+1;
                }
                else
                {
                        high=mid-1;
                }
        }
        if(found==1)
        {
                printf("The index of %d is%d",n,mid);
        }
        else
        {
                printf("There is not %d",n);
        }
}
这个题是先把20个斐波那契数打印出来,之后在任意输入<=20中任意的一个斐波那契数,  显示出来在第几个的位置并打印出来   可是,我好像数组定义冲突了,但是不知道怎么解决,大家帮忙看看怎么回事,,,(自己感觉开始的2个数好像没问题  1,1 );;;;

最佳答案

查看完整内容

修改后的代码如下: #include #define M 20 void main() { int a[20]={1,1}; int b[M],low=0,mid,high=M-1,n,found; int i; for(i=2;i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-14 19:46:16 | 显示全部楼层
本帖最后由 maomingkun 于 2013-12-14 20:44 编辑

修改后的代码如下:
#include<stdio.h>
#define M 20
void main()
{
        int a[20]={1,1};
        int b[M],low=0,mid,high=M-1,n,found;
        int i;
        for(i=2;i<20;i++)
        {
                a[i]=a[i-1]+a[i-2];               

        }
        for(i=0;i<20;i++)
        {
                b[i]=a[i];
                printf("%6d",b[i]);
        }
        printf("\n");
                //上面表示20个斐波那契数,打印出来;;
               
        printf("下面是折半法\n");
        scanf("%d",&n);  //n表示输入的数;;
       
        while(low<=high)
        {
                        mid=(low+high)/2;
                        if(n==b[mid])
                        {
                                found=1;
                                break;
                        }
                        else if(n>b[mid])
                        {
                                low=mid+1;
                        }
                        else
                        {
                                high=mid-1;
                        }
        }
        if(found==1)
        {
                        printf("The index of %d is %d\n",n,mid);
                       
        }
        else
        {
                        printf("There is not %d\n",n);
                       
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-14 20:32:34 | 显示全部楼层
本帖最后由 maomingkun 于 2013-12-14 20:45 编辑

哥们儿,我给你说一下你错哪里了!
#include<stdio.h>
#define M 20
void main()
{
        int a[20]={1,1};
        int b[M],low=0,mid,high=b[M-1],n,found;  //这里,high=b[M-1]应改为high=M-1,high是个数组下标
        int i;
        for(i=2;i<20;i++)
        {
                a=a[i-1]+a[i-2];               

        }
        for(i=0;i<20;i++)
        {
                b[M]=a[i][i];    //这里,你要把数组a的个元素赋给数组b,应该为b【i】=a【i】
                printf("%6d",a[i][i][i]);//这里a【i】[i]可以改为b【i】,不改也没关系[/i][i]
        }
        printf("\n");
         //上面表示20个斐波那契数,打印出来;;

        printf("下面是折半法\n");
        scanf("%d",&n);  //n表示输入的数;;
        while(low<=high)
        {
                mid=(low+high)/2;
                if(n==b[mid])
                {
                        found=1;
                        break;
                }
                else if(n>b[mid])
                {
                        low=mid+1;
                }
                else
                {
                        high=mid-1;
                }
        }
        if(found==1)
        {
                printf("The index of %d is%d",n,mid);
        }
        else
        {
                printf("There is not %d",n);
        }
}

这下应该没错了
[/i][/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-14 20:43:36 | 显示全部楼层
我插!出毛病了!b[i]和a[i]打不出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-14 21:07:33 | 显示全部楼层

   下次 调试好在回答我哈, 我看到有人 回复了 就不假思索的把我的代码改的和你说的一样,之后-没有之后了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-14 21:23:19 | 显示全部楼层
我说你错误的地方都有错误!
我的代码其他地方都对,就是打印数组的地方,改为下边
for(i=2;i<20;i++)
        {
                a[i]=a[i-1]+a[i-2];               

        }
        for(i=0;i<20;i++)
        {
                b[i]=a[i];
                printf("%6d",b[i]);
        }
        printf("\n");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-14 21:24:08 | 显示全部楼层
Ъγ:_小ツ雨oο 发表于 2013-12-14 21:07
下次 调试好在回答我哈, 我看到有人 回复了 就不假思索的把我的代码改的和你说的一样,之后- ...

刚才我的打不出[i]了,把我的代码贴上就行!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-14 21:25:22 | 显示全部楼层
maomingkun 发表于 2013-12-14 21:24
刚才我的打不出了,把我的代码贴上就行!

我插!为毛打不出中括号呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-22 18:12:32 | 显示全部楼层
支持一下鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-23 09:44:52 | 显示全部楼层
这里输入你的回复内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-16 21:59:19 | 显示全部楼层
顶一个呀!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表