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

楼主 |
发表于 29-3-2011 03:18 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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# 平凡魔术师
- 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 **)]---->>>放在后面??因为现在是显示在前面。。。 |
|
|
|
|
|
|
|
|
|
|
发表于 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
} |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 31-3-2011 08:37 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|