题解 | #小乐乐改数字#

小乐乐改数字

https://www.nowcoder.com/practice/fcd30aac9c4f4028b23919a0c649824d

本题最主要就是要把情况全部考虑清楚了
1. 首先就是全为偶数的情况下  --  只输出一个0
2. 首位为偶数,前几位全为偶数,但之中会有奇数  --  前几位不输出,直到奇数再输出(如: 222121 ;输出:101)
3. 首位为奇数,就是正常我们所能想到的情况了
#include <stdio.h>
int main()
{
    int x = 0;
    scanf("%d",&x);
    int q = 1;
    int arr[10] = {0};
    int y = x;
    int cnt = 1;
    //分解各个数字放入数组
    while(y > 9)
    {
        y /= 10;
        q *= 10;
        cnt++;
    }
    int i = 0;
    while(i < cnt)
    {
        arr[i] = x / q;
        x %= q;
        q /= 10;
        i++;
    }
    
    //判断其是否全为2
    int f = 0;
    for(i = 1;i < cnt;i++)
    {
        if(arr[i] != arr[i - 1])
        {
            f = 1;
            break;
        }
    }
    if(f == 0)
    {
        if(arr[0] % 2 == 0)
        {
            printf("0");
        }
    }
    //开始考虑其他情况
    //即不能让0在首位
    // 222222  --  0
    // 111111  --  111111
    // 222221  --  1
    // 222121  --  101
    else if(f == 1)
    {
        //先判断第一位数是否为偶数
        //如果是的话,就要进行第二位是否是偶数
        //依此类推
        //此时用j来判断前面有几位0
        int j = 0;
        while(arr[j] % 2 == 0)
        {
            j++;
        }

        //然后直接用i = j开始输出1 或者 0
        for(i = j;i < cnt;i++)
        {
            if(arr[i] % 2 == 0)
            {
                printf("0");
            }
            else if(arr[i] % 2 != 0)
            { 
                printf("1");
            }
        }
    }

    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务