70,022
社区成员




#include <stdio.h>
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,left=0,right=14,flag=0,d,mid;
printf("shuru:");
scanf("%d",&d);
if(d<a[14]||d >a[0]) //<-----------------楼主这个地方写错了
{
printf("\nchongxin:");
scanf("%d",&d);
}
for(;left!=right;) //<----------------判断条件
{ mid=(left+right)/2;
if(d==a[mid])
{
printf("di %d ge.\n",mid);
flag=1;break;
}
else if(d>a[mid])
right=mid-1;
else
left=mid+1;
}
if(d==a[left]) //<---------------这个地方再加一个判断
{
printf("di %d ge.\n",mid);
flag=1;
}
if(!flag)
printf("wushu.\n");
return 0;
}
#include <stdio.h>
void main()
{
int a[15] = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int left, right, flag, d, mid;
printf("shuru:");
scanf("%d", &d);
if(d < a[14] || d > a[0]) //不在数组范围内
{
printf("\nchongxin:");
scanf("%d",&d);
}
left = 0;
right = 14;
flag = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (d == a[mid])
{
printf("di %d ge.\n",mid);
flag = 1;
break;
}
else
if (d > a[mid])
right = mid - 1;
else
left = mid + 1;
}
if (flag == 0)
printf("wushu.\n");
}
#include <stdio.h>
// find 函数调用, data 必须从大到小排列
int find(int *data, int count, int value)
{
int left = 0, right = count-1, mid;
while(1)
{
if(left > right) return -1;
mid = (left + right) / 2;
if (value == data[mid])
return mid;
else if (value > data[mid])
right = mid - 1;
else
left = mid + 1;
}
}
int main()
{
int data[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; // 如要改变数据, 仅需修改此行
int value, index;
int count = sizeof(a) / sizeof(a[0]);
printf("输入要找的数:");
scanf("%d",&value);
while (value>a[count-1]||value<a[0])
{
printf("\n重新输入要找的数:");
scanf("%d",&value);
}
index = find(data, count, value);
if (index < 0)
printf("\n没找到 %d.\n", value);
else
printf("\n在第 %d 个.\n", index);
getchar();
}
#include <stdio.h>
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,left=0,right=14,flag=0,d,mid;
printf("shuru:");
scanf("%d",&d);
if(d<a[14]||d >a[0]) //这你写错了
{
printf("\nchongxin:");
scanf("%d",&d);
}
// for(i=1;i <3;i++) //这有问题,
while(true)
{
mid=(left+right)/2;
if(d==a[mid])
{
printf("di %d ge.\n",mid);
flag=1;
break;
}
else if(d>a[mid])
right=mid-1;
else left=mid+1;
}
if(flag==0)
printf("wushu.\n");
getchar(); //让程序暂停一下
getchar();
getchar();
}
#include <stdio.h>
void main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,left=0,right=14,flag=0,d,mid;
printf("shuru:");
scanf("%d",&d);
if(d < a[14]||d >a[0])
{ printf("\nchon gxin:");
scanf("%d",&d);}
for(i=1;i <5;i++) //16个最多比较4次
{
mid=(left+right)/2;
if(d==a[mid])
{
printf("di %d ge.\n",mid);
flag=1;break;
}
else if(d>a[mid])
right=mid-1;
else left=mid+1;
}
if(flag==0) printf("wushu.\n");
}