首页 > 用户发贴区 > 编程问题提问区 > 请斑主详细解答.多谢
2007
07-07

请斑主详细解答.多谢










求助.将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 条评论

  1. xstar 说:

    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]

留下一个回复