鱼C论坛

 找回密码
 立即注册
查看: 1773|回复: 4

[已解决]习题

[复制链接]
发表于 2020-12-24 10:22:08 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一组有序的数据8,9,12,18,23,34,56,78,输入一个待查找的数,如果该数存在则输出该数所在的序号,如果不存在则将该数插入到该数组中,保持数组的有序性
最佳答案
2020-12-24 13:54:34
宇轩宇轩! 发表于 2020-12-24 11:25
我想看看 不用函数的做法 有吗?()

修改一下便是了。哥们,你有几个帖子还没有选最佳答案哟~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-24 11:00:46 | 显示全部楼层
// 输入一个数,查找在数组中是否有这个数,若有,这个数是数组中的第几个数,若没有则插入该数

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         void find(int a[], int b, int high, int low);
  5.         int a[9] = { 8,9,12,18,23,34,56,78 };
  6.         int b, high = 14, low = 0;
  7.         printf("请输入要寻找的数:");
  8.         scanf("%d", &b);

  9.         find(a, b, high, low);  // 用数组名作为函数的实参

  10. }
  11. void find(int a[], int b, int high, int low)
  12. {
  13.         int i, n, mid;
  14.         n = high;
  15.         while (low <= high)
  16.         {
  17.                 mid = (high - low) / 2 + low;
  18.                 if (b > a[mid])
  19.                         low = mid + 1;
  20.                 if (b < a[mid])
  21.                         high = mid - 1;
  22.                 if (b == a[mid])
  23.                         break;      // 找到数后中断循环
  24.         }
  25.         if (b == a[mid])
  26.         {
  27.                 printf("we have the %dst number is %d\n", mid, a[mid]);

  28.         }
  29.         else
  30.         {
  31.                 for (i = n;i >= mid;i--)
  32.                         a[i + 1] = a[i];
  33.                 a[mid] = b;
  34.                 for (i = 0;i < 15;i++)
  35.                         printf("%d ", a[i]);
  36.                 printf("\n");
  37.         }

  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 11:25:52 From FishC Mobile | 显示全部楼层
我想看看 不用函数的做法 有吗?()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 13:54:34 | 显示全部楼层    本楼为最佳答案   
宇轩宇轩! 发表于 2020-12-24 11:25
我想看看 不用函数的做法 有吗?()

修改一下便是了。哥们,你有几个帖子还没有选最佳答案哟~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 14:46:18 | 显示全部楼层
宇轩宇轩! 发表于 2020-12-24 11:25
我想看看 不用函数的做法 有吗?()
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int a[14] = { 8,9,12,18,23,34,56,78 };
  5.         int b, high = 14, low = 0;
  6.         int i, n = 0, mid,count = 0;
  7.         printf("请输入要寻找的数:");
  8.         scanf("%d", &b);

  9.         for (i = 0;i < high;i++)
  10.         {
  11.                 if (a[i] != 0)
  12.                         n++;
  13.         }
  14.         high = n;
  15.         n = n + 1;
  16.         // 因为题目所给数据不足再加上 high 在运行中会不断地被修改
  17.         while (low <= high)
  18.         {
  19.                 mid = (high - low) / 2 + low;
  20.                 if (b > a[mid])
  21.                         low = mid + 1;
  22.                 if (b < a[mid])
  23.                         high = mid - 1;
  24.                 if (b == a[mid])
  25.                         break;      // 找到数后中断循环
  26.         }
  27.         if (b == a[mid])
  28.         {
  29.                 printf("we have the %dst number is %d\n", mid, a[mid]);

  30.         }
  31.         else
  32.         {
  33.                 for (i = n;i >= mid;i--)
  34.                 {
  35.                         a[i + 1] = a[i];
  36.                 }
  37.                 a[mid + 1] = b;
  38.                 for (i = 0;i < n;i++)
  39.                         printf("%d ", a[i]);
  40.                 printf("\n");
  41.         }

  42. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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