关于这个问题,有什么解决办法吗

小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当
两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,
将数值小的排在前面。
例如,2022 排在 409 前面,因为 2022 的数位之和是 6,小于 409 的数位
之和 13。
又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。
给定正整数 n,m,请问对 1 到 n 采用这种方法排序时,排在第 m 个的元
素是多少?
【输入格式】
输入第一行包含一个正整数 n。
第二行包含一个正整数 m。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
13
5
【样例输出】
3

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int SWH(int n);
    int n, m, t,i,j, a[1000];
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        a[i] = i + 1;
    }
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
        if (SWH(a[i]) > SWH(a[i+1]))
        {
            t = a[i];
            a[i] = a[i + 1];
            a[i + 1] = t;
        }
        if (SWH(a[i]) == SWH(a[i + 1]))
        {
            if (a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    return 0;
}
int SWH(int n)
{
    int t;
    {
        if (1 <= n <= 9)
            t = 0 + 0 + 0 + n;
        else if (n <= 99)
            t = 0 + 0 + n / 10 + n % 10;
        else if (n <= 999)
            t = n / 100 + n % 100 / 10 + n % 100 % 10;
        else if (n = 1000)
            t = 1;
    }
    return (int) t;
}

输入13,但是排序就是顺序排序,没有执行题目要求完成排序

期间也改了很多次,但没有什么效果

请学长帮忙看下,这个代码该如何修改

修改处见注释,供参考:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int SWH(int n);
    int n, m, t,i,j, a[1000];
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        a[i] = i + 1;
    }
    scanf("%d", &m);  //修改
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
        if (SWH(a[i]) > SWH(a[i+1]))
        {
            t = a[i];
            a[i] = a[i + 1];
            a[i + 1] = t;
        }
        else if (SWH(a[i]) == SWH(a[i + 1])) //修改:else
        {
            if (a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    printf("\n");

    printf("%d", a[m-1]); //修改

    return 0;
}
int SWH(int n)
{
    int t = 0;
    //{
        if (1 <= n && n <= 9)  //if (1 <= n <= 9) 修改
            t = 0 + 0 + 0 + n;
        else if (n <= 99)
            t = 0 + 0 + n / 10 + n % 10;
        else if (n <= 999)
            t = n / 100 + n /10 % 10 + n  % 10;
            // t = n / 100 + n % 100 / 10 + n % 100 % 10; 修改
        else if (n == 1000)  // else if (n = 1000)  修改
            t = 1;
    //}
    return t;
}