Ъγ:_小ツ雨oο 发表于 2013-12-14 19:46:15

一位数组折半法

本帖最后由 Ъγ:_小ツ雨oο 于 2013-12-14 20:00 编辑

#include<stdio.h>
#define M 20
void main()
{
      int a={1,1};
      int b,low=0,mid,high=b,n,found;
      int i;
      for(i=2;i<20;i++)
      {
                a=a+a;               

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

      printf("下面是折半法\n");
      scanf("%d",&n);//n表示输入的数;;
      while(low<=high)
      {
                mid=(low+high)/2;
                if(n==b)
                {
                        found=1;
                        break;
                }
                else if(n>b)
                {
                        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 );;;;

maomingkun 发表于 2013-12-14 19:46:16

本帖最后由 maomingkun 于 2013-12-14 20:44 编辑

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

      }
      for(i=0;i<20;i++)
      {
                b=a;
                printf("%6d",b);
      }
      printf("\n");
                //上面表示20个斐波那契数,打印出来;;
               
      printf("下面是折半法\n");
      scanf("%d",&n);//n表示输入的数;;
       
      while(low<=high)
      {
                        mid=(low+high)/2;
                        if(n==b)
                        {
                                found=1;
                                break;
                        }
                        else if(n>b)
                        {
                                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);
                       
      }
}

maomingkun 发表于 2013-12-14 20:32:34

本帖最后由 maomingkun 于 2013-12-14 20:45 编辑

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

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

      printf("下面是折半法\n");
      scanf("%d",&n);//n表示输入的数;;
      while(low<=high)
      {
                mid=(low+high)/2;
                if(n==b)
                {
                        found=1;
                        break;
                }
                else if(n>b)
                {
                        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);
      }
}

这下应该没错了

maomingkun 发表于 2013-12-14 20:43:36

我插!出毛病了!b和a打不出来了

Ъγ:_小ツ雨oο 发表于 2013-12-14 21:07:33

maomingkun 发表于 2013-12-14 20:43 static/image/common/back.gif
我插!出毛病了!b和a打不出来了

{:5_94:}   下次 调试好在回答我哈, 我看到有人 回复了 就不假思索的把我的代码改的和你说的一样,之后-没有之后了

maomingkun 发表于 2013-12-14 21:23:19

我说你错误的地方都有错误!
我的代码其他地方都对,就是打印数组的地方,改为下边
for(i=2;i<20;i++)
      {
                a=a+a;               

      }
      for(i=0;i<20;i++)
      {
                b=a;
                printf("%6d",b);
      }
      printf("\n");

maomingkun 发表于 2013-12-14 21:24:08

Ъγ:_小ツ雨oο 发表于 2013-12-14 21:07 static/image/common/back.gif
下次 调试好在回答我哈, 我看到有人 回复了 就不假思索的把我的代码改的和你说的一样,之后- ...

刚才我的打不出了,把我的代码贴上就行!

maomingkun 发表于 2013-12-14 21:25:22

maomingkun 发表于 2013-12-14 21:24 static/image/common/back.gif
刚才我的打不出了,把我的代码贴上就行!

我插!为毛打不出中括号呢?

瑞恩 发表于 2013-12-22 18:12:32

支持一下鱼C

364063141 发表于 2013-12-23 09:44:52

这里输入你的回复内容

key2046 发表于 2017-1-16 21:59:19

顶一个呀!!
页: [1]
查看完整版本: 一位数组折半法