用C语言打印出符合条件的回文数

问题遇到的现象和发生背景

汽⻋的⾥程表显示6位整数的公⾥数。例如,⼩明的⻋有300000公⾥⾥程,则会看到
3-0-0-0-0-0。某天,⼩明发现⾥程数的最后4位数是回⽂。例如,5-4-4-5是⼀个
回⽂,所以⾥程表可能显示为3-1-5-4-4-5。1公⾥之后,后5位数组成⼀个回⽂。
例如,它可以是3-6-5-4-5-6。再过1公⾥,6位数的中间4位是⼀个回⽂。⼜过了1
公路,所有的6位数都成了回⽂。请问,第⼀次看⾥程表时,它的示数是多少?
• 编写程序,检查全部的6位数,逐⾏打印出可以满⾜上述要求的数字

操作环境、软件版本等信息

codebook20.03

尝试过的解决方法
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,k,m,count=0;
    int i = 0;
    char arr[30000] = {0};
    for(n = 1; n < 300000; n++)
    {
        m = n;
        k = 0;
        while(m > 0)
        {
            k = 10*k + m%10;
            m = m/10;
   }
        if(n == k){
            arr[i] = n;
            i++;
        }

    }
    printf("%d\n",n);


    return 0;
}


我想要达到的结果检查全部的6位数,逐⾏打印出可以满⾜上述要求的数字
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7653291
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

供参考:

#include <stdio.h>
#include <stdlib.h>
int fun(int n)
{
    int k = n, m = 0;
    if (n <= 1000) return 0;
    while (k) {
        m = m * 10 + k % 10;
        k /= 10;
    }
    return m == n;
}
int main()
{
    int n, k;
    int i = 0;
    int arr[30000] = { 0 }; //char arr[30000] = { 0 };
    scanf("%d", &k);
    for (n = k, k = (k / 100000 + 1) * 100000; n < k; n++)
    {
        if (fun(n % 10000) || fun(n % 100000) || fun((n / 10) % 10000) || fun(n))
            arr[i++] = n;
    }
    printf("i=%d\n", i);
    while (i--) {
        printf("%d\n", arr[i]);
    }
    return 0;
}