C语言,输入15个整数从大到小排序,然后输入一个数字,算出这个数字在这里的位置
答案:2 悬赏:30 手机版
解决时间 2021-03-20 22:18
- 提问者网友:人生佛魔见
- 2021-03-20 13:57
C语言,输入15个整数从大到小排序,然后输入一个数字,算出这个数字在这里的位置
最佳答案
- 五星知识达人网友:执傲
- 2021-03-20 15:24
#include
int main()
{int a[15],i,n,mid,x=0,y=14,sign;
printf("输入15个整数,从大到小排序:");
for(i=0;i<15;i++)
scanf("%d",&a[i]);
printf("输入你想查找的数字:");
scanf("%d",&n);
if( (n>a[0])||(nsign=0;
if(n==a[0])
printf("此数字为第1个");
if(n==a[14])
printf("此数字为第15个");
while(n<=a[0]&&n>=a[14])
{
for(i=0;i<15;i++)
if(n!=a[i]) sign=0;break;
mid=(x+y)/2;
if(n==a[mid])
{printf("´此数字为%d个\n",mid+1);
sign=1;
break;}
else if(n>a[mid])
y=mid-1;
else
x=mid+1;}
if(sign!=1)
printf("该数不存在\n");
return 0;}
你缺少一个条件你缺少了一个如果数字在a[0]和a[14]之间但不属于a[0]到a[14]中的任何一个的条件,所以加上这个就可以了
for(i=0;i<15;i++)
if(n!=a[i]) sign=0;break;
int main()
{int a[15],i,n,mid,x=0,y=14,sign;
printf("输入15个整数,从大到小排序:");
for(i=0;i<15;i++)
scanf("%d",&a[i]);
printf("输入你想查找的数字:");
scanf("%d",&n);
if( (n>a[0])||(nsign=0;
if(n==a[0])
printf("此数字为第1个");
if(n==a[14])
printf("此数字为第15个");
while(n<=a[0]&&n>=a[14])
{
for(i=0;i<15;i++)
if(n!=a[i]) sign=0;break;
mid=(x+y)/2;
if(n==a[mid])
{printf("´此数字为%d个\n",mid+1);
sign=1;
break;}
else if(n>a[mid])
y=mid-1;
else
x=mid+1;}
if(sign!=1)
printf("该数不存在\n");
return 0;}
你缺少一个条件你缺少了一个如果数字在a[0]和a[14]之间但不属于a[0]到a[14]中的任何一个的条件,所以加上这个就可以了
for(i=0;i<15;i++)
if(n!=a[i]) sign=0;break;
全部回答
- 1楼网友:孤独的牧羊人
- 2021-03-20 16:28
#include
int main()
{
int a[15], i, n, mid, x = 0, y = 14, sign;
printf("输入15个整数 : ");
for(i = 0; i < 15; i++) scanf("%d", &a[i]);
printf("输入你想查找的数字 : "); scanf("%d", &n);
for(i = 0; i < 15; i++) if (n == a[i]) break;
if(i == 15) printf("该数不存在\n");
else printf("此数字为%d个\n", i + 1);
return 0;
}追问我们要用折中法,你的方法对的,我们老师说如果有1000个数字,你就要最多比较1000次,折中方法最多10次追答#include
int main()
{
int a[15] = {16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 2, 1};
int n, mid, x = 1, y = 13;
// printf("输入15个整数,从大到小排序:");
// for(i = 0; i < 15; i++) scanf("%d", &a[i]);
printf("输入你想查找的数字: "); scanf("%d", &n);
if((n > a[0]) || (n < a[14])) { printf("该数不存在\n"); return 0; }
if(n == a[0]) { printf("此数字为第1个"); return 0; }
if(n == a[14]) { printf("此数字为第15个"); return 0; }
while(n < a[0] && n > a[14]) {
mid = (x + y) / 2;
if(n == a[mid]) { printf("此数字为%d个\n", mid + 1); return 0;}
if(n > a[mid]) y = mid - 1;
else x = mid + 1;
if (x == y) break;
}
printf("该数不存在\n"); return 0;
}
-------------------
楼主选择的答案,并没有使用“折中法”。
加上这句:for(i=0;i<15;i++)if(n!=a[i]) sign=0;break; 之后,
仍然是 1000 个数,最多要查找 1000 遍。
而且,加上这句之后,本应该查到的数据,也查不到了。
int main()
{
int a[15], i, n, mid, x = 0, y = 14, sign;
printf("输入15个整数 : ");
for(i = 0; i < 15; i++) scanf("%d", &a[i]);
printf("输入你想查找的数字 : "); scanf("%d", &n);
for(i = 0; i < 15; i++) if (n == a[i]) break;
if(i == 15) printf("该数不存在\n");
else printf("此数字为%d个\n", i + 1);
return 0;
}追问我们要用折中法,你的方法对的,我们老师说如果有1000个数字,你就要最多比较1000次,折中方法最多10次追答#include
int main()
{
int a[15] = {16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 2, 1};
int n, mid, x = 1, y = 13;
// printf("输入15个整数,从大到小排序:");
// for(i = 0; i < 15; i++) scanf("%d", &a[i]);
printf("输入你想查找的数字: "); scanf("%d", &n);
if((n > a[0]) || (n < a[14])) { printf("该数不存在\n"); return 0; }
if(n == a[0]) { printf("此数字为第1个"); return 0; }
if(n == a[14]) { printf("此数字为第15个"); return 0; }
while(n < a[0] && n > a[14]) {
mid = (x + y) / 2;
if(n == a[mid]) { printf("此数字为%d个\n", mid + 1); return 0;}
if(n > a[mid]) y = mid - 1;
else x = mid + 1;
if (x == y) break;
}
printf("该数不存在\n"); return 0;
}
-------------------
楼主选择的答案,并没有使用“折中法”。
加上这句:for(i=0;i<15;i++)if(n!=a[i]) sign=0;break; 之后,
仍然是 1000 个数,最多要查找 1000 遍。
而且,加上这句之后,本应该查到的数据,也查不到了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯