鱼C论坛

 找回密码
 立即注册
查看: 1467|回复: 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
我想看看 不用函数的做法 有吗?()

修改一下便是了。哥们,你有几个帖子还没有选最佳答案哟~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-24 11:00:46 | 显示全部楼层
// 输入一个数,查找在数组中是否有这个数,若有,这个数是数组中的第几个数,若没有则插入该数
#include<stdio.h>
int main()
{
        void find(int a[], int b, int high, int low);
        int a[9] = { 8,9,12,18,23,34,56,78 };
        int b, high = 14, low = 0;
        printf("请输入要寻找的数:");
        scanf("%d", &b);

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

}
void find(int a[], int b, int high, int low)
{
        int i, n, mid;
        n = high;
        while (low <= high)
        {
                mid = (high - low) / 2 + low;
                if (b > a[mid])
                        low = mid + 1;
                if (b < a[mid])
                        high = mid - 1;
                if (b == a[mid])
                        break;      // 找到数后中断循环
        }
        if (b == a[mid])
        {
                printf("we have the %dst number is %d\n", mid, a[mid]);

        }
        else
        {
                for (i = n;i >= mid;i--)
                        a[i + 1] = a[i];
                a[mid] = b;
                for (i = 0;i < 15;i++)
                        printf("%d ", a[i]);
                printf("\n");
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 11:25:52 From FishC Mobile | 显示全部楼层
我想看看 不用函数的做法 有吗?()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

修改一下便是了。哥们,你有几个帖子还没有选最佳答案哟~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        for (i = 0;i < high;i++)
        {
                if (a[i] != 0)
                        n++;
        }
        high = n;
        n = n + 1;
        // 因为题目所给数据不足再加上 high 在运行中会不断地被修改
        while (low <= high)
        {
                mid = (high - low) / 2 + low;
                if (b > a[mid])
                        low = mid + 1;
                if (b < a[mid])
                        high = mid - 1;
                if (b == a[mid])
                        break;      // 找到数后中断循环
        }
        if (b == a[mid]) 
        {
                printf("we have the %dst number is %d\n", mid, a[mid]);

        }
        else
        {
                for (i = n;i >= mid;i--)
                {
                        a[i + 1] = a[i];
                }
                a[mid + 1] = b;
                for (i = 0;i < n;i++)
                        printf("%d ", a[i]);
                printf("\n");
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 16:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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