首页 > 一维数组{0,1,0,2,3},如何遍历数组并实现输出1,0,2,3和3,2,0,1?

一维数组{0,1,0,2,3},如何遍历数组并实现输出1,0,2,3和3,2,0,1?

原题是这样的:

输入一个五位以内(含五位)的正整数
(1)判断它是一个几位数;
(2)请按序输出其各位数字;
(3)逆序输出其各位数字。
要求:使用指针
如输入:56439,
输出:
五位数
5,6,4,3,9
9,3,4,6,5

我已经实现输入数据,判断位数,并将每一位存到一个数组中。因为事先不知道用户要输入几位,所以数组按照有可能输入的最大数来定义,即输入五位数,,定义一个长度为5的数组a[5],把每一位装进数组中。但是假如用户输入了小于5位数的,并且这个数的中间有某一位是0,比如1004,那么这个时候数组各元素为{0,1,0,0,4},我的问题是:如何能按照题意,输出1,0,0,4 和4,0,0,1 ?

下面是我的代码段:

c#include <stdio.h>

int main(int argc, const char * argv[]) {

    unsigned long n = 0;

    //输入一个数

    while (1) {

        printf("Input a number(0~9999): \n");

        scanf("%lu", &n);

        if (n > 0 && n < 100000) {

            break;
        }
    }

    //判断是几位数
    //每一位存入数组
    int i = 0;

    int a[5] = {0};

    int *p = &a[4];

    while (n != 0) {

        *p = n % 10;

        n /= 10;

        i++;
        p--;
    }

    printf("\ndigit:%d\n\n",i);

    //遍历数组,输出元素
    for (int i = 0; i < 5; i++) {

        printf("%d ", a[i]);
    }

    printf("\n");

    //倒序输出元素
    for (int i = 4; i >= 0; i--) {

        printf("%d ", a[i]);

    }

    printf("\n");

    return 0;
}

其实你的代码可以实现这样的功能吧。
你看,假设输入的是四位数,你也能正确判断是几位数并输出了吧。也就是你把数字拆开那个循环里的变量i。
你需要修改的是,在输出的时候,不要用i作循环变量,换个j什么的,然后把i当做正序输出的终点,或者逆序输出的起点。


可以参考桶排序的思路,不过桶排序是对应的数出现一次就在对应的桶中加一,这里可以这样设计:没出现过的数字的桶中是0,出现过一次及一次以上的对应的桶中只是1,然后按顺序遍历桶,如果是1就输出,是0就不输出(顺序还是逆序在输出的时候控制就OK了)


你都可以判断出用户输出多少位了 循环的时候就用位数来做循环依据就好了啊``!


题主已经将1004解析成了{0, 1, 0, 0, 4}数组,然后遇到的问题是第一个占位的0(其实代表没有该位)与后面的有效0(该位上的数据为0)无法区分。题主只需将占位符换成一个其他的唯一含义字符便可消除0的二义性了。比如

// 用PLACEHOLDER填充数组,输出时过滤掉PLACEHOLDER位
#define PLACEHOLDER    0xff
【热门文章】
【热门文章】