鱼C论坛

 找回密码
 立即注册
查看: 2700|回复: 2

数字查找与排序问题 请看看。。。

[复制链接]
发表于 2013-12-3 17:35:21 | 显示全部楼层 |阅读模式

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

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

x
/*一组有序的数据8,9,12,18,23,34,56,78,输入一个待查找的数,如果该数存在则
输出该数所在的序号,如果不存在则将该数插入到该数组中,保持数组的有序性。*/
#include "stdio.h"

int main(void)
{
        int a[8]={8,9,12,18,23,34,56,78},i,num,j;
        scanf("%d",&num);
        for(i=0;i<8;i++)
        {
                if(num==a[i])
                {
                printf("%d的位置是第%d个",num,i+1);
                break;     
                }
       
        }

        if(i==8)   //num的值不在a数组中的情况
                {
                        for(i=0;i<8;i++)
                                if(num<a[i])      
                                        break;      //跳出循环后,将i的值传递给下面的语句,由其去判断。
               
                        if(i!=0)    //num的值大于78 或 大于8小于78 的情况
                        {
                                for(j=0;j<i;j++)  
                                        printf("%d ",a[j]);   //先输出比num小的值
                                printf("%d ",num);       //再输出num的值
                                for(j=i;j<8;j++)      
                                        printf("%d ",a[j]);   //最后输出比num大的值
                        }
            //if(i==0)语句需放在if(i!=0)的下面。否则,i的值经过if(i==0)语句,改变为8,使得if(i!=0)语句符合条件而执行,影响输出结果。
                        if(i==0)    //num的值小于8的情况
                        {
                            printf("%d ",num);  
                            for(i=0;i<8;i++)
                                printf("%d ",a[i]);
                        }
                }
        return 0;
}


代码正确,结果也正确。
就感觉这代码不怎么好,有点复杂。
请问大神
你有什么不同的思路
请指教一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 21:44:32 | 显示全部楼层
写了一个,用两个数组比较方便~代码奉上,有错误请指出~~~
#include "stdio.h"
int main(void)
{
        int a[8]={8,9,12,18,23,34,56,78},i,num,temp[8];
        scanf("%d",&num);
        if((num!=8)&&(num!=9)&&(num!=12)&&(num!=18)&&(num!=23)&&(num!=34)&&(num!=56)&&(num!=78))   
        {                                                //如果查找的数不在数组内那么执行插入算法
                for (i=0;i<8;i++)
                {
                        temp[i]=a[i];                             
                }
                for (i=0;i<8;i++)
                {
                        if((a[i]<num)&&(num<a[i+1]))      
                        {                                                                                       
                                a[i+1]=num;                                       
                                for (;i<8;i++)                               
                                {
                                        a[i+2]=temp[i+1];               
                                }
                        }
                }
                for (i=0;i<8;i++)
                {
                        printf("%d ",a[i]);
                }               
        }
        else
        {       
                for (i=0;i<8;i++)
                {
                        if (a[i]==num)
                        {
                                printf("%d\n",i+1);
                        }
                }               
        }       
        return 0;
}

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

使用道具 举报

 楼主| 发表于 2013-12-4 00:44:46 | 显示全部楼层

你好 谢谢你的回帖
在输入不属于a数组里面的值的num时,出错了。
部分代码(输入的数num不是a数组里的值时)出错了
if((a[i]<num)&&(num<a[i+1]))
当输入的数num大于78时,i=7,而元素a[8]不存在。
   for (i=0;i<8;i++)
                {
                        printf("%d ",a[i]);
                }  
请问你是想把num的值嵌入a数组里面,然后将num在内的九个值输出吗?
但初始化后不能改变数组的大小。
这是我的看法,希望对你有点帮助。{:1_1:}
              
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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