求助.将fenbi[]数组中从小到大排序的前10个数,对应找出和bu[]数组相同的数.并将和bu[]相同的数的下标.正确输出.(我下面的程序输出的bu[]的下标不正确.请指教问题出在那里?多谢. #include<stdio.h> void main() { int i,j,k,p,temp; int fenbi[30]={8,1,2,0,7,11,15,3,0,0,5,11,14,33,18,21,5,25,0,3,9,4,4,14,16,9,18,0,5,89}; int pai[10]={5,2,5,3,4,5,1,2,2,1}; int hd[10]={0}; for (k=0; k<30; k++) { for (i=0; i<30-k; i++) if (fenbi[i] > fenbi[i+1]) { temp = fenbi[i]; fenbi[i] = fenbi[i+1]; fenbi[i+1] = temp; } } for(i=0; i<30; i++) { if (fenbi[i] != 0) { printf(“%4d ”,fenbi[i]); if ((i+1)%5==0) { printf(“\n”); } }
} printf(“\n”);
//找出从小到大fenbi[]十个数在hd[]数组下标的位置 i=0;j=0; for(i=0;i<30;i++) { for(j=0;j<10;j++) { if(fenbi[i] == pai[j]) //对比数组元素是否相等 { pai[j]=0; //把相等的赋零给pai[],再循环的时候就不会再对比。 hd[i]=j; //相等的将它的数组元素的下标(位置)赋给hd[] break; //相等的就不再循环下去进行对比而跳出 } } } for(i=0;i<30;i++) { for(j=0;j<10;j++) { if(hd[i]==j) // { pai[j]=fenbi[i]; // } } } { printf(“输出fenbi数组前10个数在hd数组中下标的位置”); printf(“\n”); for(p=0;p<10;p++) printf(“%4d”,hd[p]); printf(“\n”); } }
|
|
1)排序算法里,看看i的范围,fenbi肯定越界。
[code]
for (k=0; k<30; k++)
{
for (i=0; i<30-k; i++)
if (fenbi[i] > fenbi[i+1])
[/code]
当k = 0, i = 29的时候,fenbi[i+1]越界访问。
2)比较里面,分析一下需要比较的数据,=0并不能把该项排除在外。
[code]
if(fenbi[i] == pai[j]) //对比数组元素是否相等
{
pai[j]=0; //把相等的赋零给pai[],再循环的时候就不会再对比。
[/code]
fenbi[]里有0值,你把pai[]里的值设置为0根本是扰乱数据。
上面是主要的,另外再读一边题目吧,是输出下标,而且是hd里的下标。
比如
fenbi[] = { 2, 3, 1, … };
hd[] = { 3, 1, 0, 2 };
则输出的下标是 1, 3, 0
程序分两步:排序和查找并输出下标,
排序不用讲了,输出下标:
[code]
for ( i = 0; i < 30; i++ ) {
for ( j = 0; j < 10; j ++ ) {
if ( hd[j] == fenbi[ i ] ) {
flag = 1;
printf( j );
break;
}
}
if ( flag != 1 ) {
printf( -1 ); //没有该数据
}
}
[/code]