佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1050|回复: 16

新手问题

[复制链接]
发表于 25-3-2011 11:25 AM | 显示全部楼层 |阅读模式
想请问哪位大大能帮帮小弟??
小弟的问题是比如我用fopen来开启了一个txt档,txt档里有10个不同的号码,然后在用point的方法把10个号码印出来。现在我加了一个scanf(因为要用来查找输入的号码是否又在这10个号码里),然后我要如何才能让输入的号码自动去查找10个号码里中间那个是否大于或小于,如果大于将不理会前面小于的来做比较,比较之后又在自动拿中间的来查找(最多只做4次),而小于的就跟大于的对调,只自动查找小于那里的,如果各位大大会的话请教教小弟,给shoot都没关系,最终要我学会,拜托各位~~
回复

使用道具 举报


ADVERTISEMENT

发表于 25-3-2011 02:56 PM | 显示全部楼层
............. 好乱....

LZ... 给实际例子吧.

start: 10 9 8 7 6 5 4 3 2 1
input: 5
output: ????
回复

使用道具 举报

 楼主| 发表于 25-3-2011 06:07 PM | 显示全部楼层
回复 2# eh2001


比如:
15 17 22 23 32 34 53 55 66 75
当我输入17的时候,他会先找17是否大于10个号码里中间那个(32),可是17小于32,所以32之后的号码都不会去查找,只查找32前面的,当显示17小于32之后,17会再用来跟前面5个号码中间那个再做比对(22),显示17小于22后,就会拿17跟前面3个号码中间那个(17)比对,结果就会显示一样。
另一种就是找不到会显示没有此号码。

这两种功能都要在一起,总之就是只做4次,第4次就是显示结果一样或没有此号码。
大大,你能教我吗??
回复

使用道具 举报

发表于 25-3-2011 11:10 PM | 显示全部楼层
回复 3# sheung92

你的问题很奇怪... 以下是根据你的要求所编 (JAVA).很明显, 如果当你的 input 是大于或等有 data 中间的值时, 你的 output 永远是找不到.
因为你只向前找.

boolean found = false;int[] data = new int[]{15, 17, 22, 23, 32, 34, 53, 55, 66, 75};
int input = 17;
int current_index = -1;
for (int i=0; i<4 && !found; i++){
    int mid_num;
    current_index = ((i == 0) ? data.length : current_index) / 2;
    mid_num = data[current_index];

    if (input < mid_num) continue; else found = (input == mid_num);
}


System.out.println("Found: " + found);
回复

使用道具 举报

 楼主| 发表于 26-3-2011 06:03 AM | 显示全部楼层
回复 4# eh2001


不是java来的,我看到头脑都乱了 ><"
回复

使用道具 举报

 楼主| 发表于 26-3-2011 03:28 PM | 显示全部楼层
已经解决这问题了,但有个愚蠢的问题想问问,就是。。。
for(a = 0; a < ARRAY_SIZE-1; a++)
                   for(b = 0; b < ARRAY_SIZE-a-1; b++)
                         if(*(p+b) > *(p+b+1)) {
                                                t = *(p+b+1);
                                                *(p+b+1) = *(p+b);
                                                *(p+b) = t;
                                                printf ("[(** %d exchange with %d **)]---->>>   ",t,*(p+b+1));
                                                print_array(iarray);
                                                }

要如何把[(** %d exchange with %d **)]---->>>放在后面??因为现在是显示在前面。。。
回复

使用道具 举报

Follow Us
发表于 28-3-2011 10:55 PM | 显示全部楼层
你要什么language???
回复

使用道具 举报

发表于 28-3-2011 11:54 PM | 显示全部楼层
lz 是用 binary search 的方式,对吗?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 29-3-2011 03:18 PM | 显示全部楼层
回复 7# siemen90


    C++
回复

使用道具 举报

 楼主| 发表于 29-3-2011 03:19 PM | 显示全部楼层
回复 8# 平凡魔术师


   对,不知大大知不知道我第二个问题要怎样做??
回复

使用道具 举报

发表于 29-3-2011 03:33 PM | 显示全部楼层
回复 10# sheung92


    你所指的放在后面是什么意思??
回复

使用道具 举报

发表于 29-3-2011 03:38 PM | 显示全部楼层
回复  siemen90


    C++
sheung92 发表于 29-3-2011 03:18 PM



    应该不是C++,你用的是printf,所以应该是C
回复

使用道具 举报

 楼主| 发表于 29-3-2011 06:59 PM | 显示全部楼层
回复 11# 平凡魔术师


   
  1. for(a = 0; a < ARRAY_SIZE-1; a++)
  2. for(b = 0; b < ARRAY_SIZE-a-1; b++)
  3. if(*(p+b) > *(p+b+1)) {
  4. t = *(p+b+1);
  5. *(p+b+1) = *(p+b);
  6. *(p+b) = t;
  7. printf ("[(** %d exchange with %d **)]---->>> ",t,*(p+b+1));
  8. print_array(iarray);
  9. }
复制代码

要如何把[(** %d exchange with %d **)]---->>>放在后面??因为现在是显示在前面。。。
回复

使用道具 举报

发表于 30-3-2011 01:35 PM | 显示全部楼层
回复  平凡魔术师


   
要如何把[(** %d exchange with %d **)]---->>>放在后面??因为现在是显示在 ...
sheung92 发表于 29-3-2011 06:59 PM



    用 \t  ,这是TAB的功能
回复

使用道具 举报

 楼主| 发表于 30-3-2011 05:49 PM | 显示全部楼层
回复 14# 平凡魔术师


    试过了,没办法~ ><"
回复

使用道具 举报

 楼主| 发表于 30-3-2011 09:59 PM | 显示全部楼层
本帖最后由 sheung92 于 30-3-2011 10:01 PM 编辑

小弟现在又多一个问题了,就是要如何在做binary search时会写出输入值是" > "里面抽出来的数字或是" < "??要用符号的方法,下面是小弟现在binary search的一小段
int b_s(int in[],int ky ,int m){ //Binary Search
int l =0,/* Lower Value In Array*/ h=m-1,/*Higher Value In Array*/ md,/*Variable For Middle Value*/ i;/*For Looping*/         
int *p; //Pointer
p =in; //Setting Pointer

while ( l <= h ){ //Looping 'low' Smaller Than 'high'
md = (l + h) /2; //Get Middle Value In Array Number         
if (*(p+md) > ky){ //If Middle Value Big Than The User Input Value
h = md - 1; //Cut And Show The Value After Middle
for (i=l ;i<=h ;i++){ //Looping
printf ("%d ",*(p+i));} //Print Out Process      
printf ("\n");
}
        
else if (*(p+md) < ky){ //Else IF Middle Value Smaller Than User Input Value
l = md + 1 ; //Cut And Show The Value After Middle
for (i=l ;i<=h ;i++){ //Looping
printf ("%d ",*(p+i));} //Print Out Process
printf ("\n");
}
        
else if (*(p+md)==ky){ //If Middle Value Same With The User Input Value
return md; //Return To Middle Value
}
}
return -1; //If Fail To Find Will Return To Main
}
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 31-3-2011 08:37 AM | 显示全部楼层
真的急着要了,有哪位大大能帮忙??
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 15-11-2025 02:23 PM , Processed in 0.099246 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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