题解 | #小乐乐改数字#
小乐乐改数字
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;
}