新人一枚 帮我看看这个问题怎么ac

图片说明
这是原题 本来换个思路就很简单了 但我就是纠结于自己的代码所以越改越长 但是瑕疵感觉都没有了 可是为什么还是ac不了?
放代码:

 #include<stdio.h>

int main()
{
    int a[1000] = {0}, s = 0, k = 0, i = 0, j, n, w = 0;
    char ch;
    scanf("%d", &n);
    getchar();
    while(n-- > 0){
        for(int z = 0; z < 1000; z++)//初始化
            a[z] = 0;
        while((ch = getchar()) != '\n'){     //输入。。
            a[i++] = ch;
        }
        a[i] = -1;

        for(; w <= i; w++){
                if(a[w] == ' '){
                    w = 0;
                    break;
                }
            }
        if(w){                              //分为行内有空格与行内无空格两种情况,w不为0是无空格的情况
                for(i--; i >= 0; i--)
                    printf("%c", a[i]);
            }
        else for(j = 0, k = 0, s = 0; j <= i; j++){
             if(a[j] == ' ' || a[j] == -1){
                s = j--;
                for(; j >= k; j--)
                     if(s != i || j != k)//这个判断是用来去除句末空格的
                        printf("%c", a[j]);

                if(!k)
                    printf(" ");
                k = j = s;

            }

        }

        if(n)
            printf("\n");
        i = 0;
    }
    return 0;
}

0.0自己看着都晕赶脚方法好蠢

http://blog.csdn.net/softwave/article/details/626644