
#include<stdio.h>
#include<string.h>
struct num{
int ads;
int num;
int ads_next;
};
int main(){
int n,k,ad_1;
int ads;
scanf("%d %d %d",&ad_1,&n,&k);//k是基准元素
//char ad,next;
struct num point[100001];
/*for(int i=0;i<n;i++){
scanf("%d %d %d",&point[i].ads ,&point[i].num ,&point[i].ads_next );
}*/
int f_num=0,z_num=0,d_num=0;
for(int i=0;i<n;i++){
scanf("%d",&ads);//结点地址做下标
scanf("%d %d",&point[ads].num ,&point[ads].ads_next );
point[ads].ads =ads;
if(point[ads].num <0){
f_num++;
}
else if(point[ads].num >=0&&point[ads].num <=k){
z_num++;
}
else{
d_num++;
}
}
//新建一个输出用的数组
struct num newpoint[n];
ads=ad_1;
int i=0;
while(ads!=-1&&f_num!=0){//先存放负数的
if(point[ads].num <0)
{
newpoint[i].num =point[ads].num ;
newpoint[i].ads =point[ads].ads ;
i++;
f_num--;
}
ads=point[ads].ads_next ;
}
ads=ad_1,i=0;
while(ads!=-1&&z_num!=0){
if(point[ads].num >=0&&point[ads].num <=k)
{
newpoint[i].num =point[ads].num ;
newpoint[i].ads =point[ads].ads ;
i++;
z_num--;
}
ads=point[ads].ads_next ;
}
ads=ad_1,i=0;
while(ads!=-1&&d_num!=0){
if(point[ads].num >k){
newpoint[i].num =point[ads].num ;
newpoint[i].ads =point[ads].ads ;
i++;
d_num--;
}
ads=point[ads].ads_next ;
}
//最后一个不要忘记置为-1
newpoint[i].ads =-1;
for(int j=0;j<n;j++){
//nextads怎么得到呢?
printf("%05d %d",newpoint[j].ads ,newpoint[j].num);
//if(j!=n-1)
if(newpoint[j+1].ads !=-1)
printf(" %05d\n",newpoint[j+1].ads );
else{
printf(" -1\n");
//break;
}
}
return 0;
}
这是我的输出:明显错误

提交到pta后也只有一个测试点通过 请问我错在哪里了呢?为什么 不能正确得到输出?