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