L1-033 出生年

#include<stdio.h>

int main() {
    int year, weishu, arr[10] = {0}, b = 0, temp = 0, sum = 0;
    
    // 输入年份和位数
    scanf("%d %d", &year, &weishu);
    
    // 从输入的年份开始,逐年检查
    for (int i = year; ; i++) {
        temp = i;
        
        // 取变量year中的每一位,作为数组的下标存入数组
        // 因为题意要求年份最大为3000,最大为四位数,所以循环四次
        // 一个数求余数是取个位,整除10是去掉个位
        for (int h = 0; h < 4; h++) {
            b = temp % 10;  // 取当前数字的个位数
            arr[b]++;       // 将对应数组位置的值加1
            temp = temp / 10;  // 去掉当前数字的个位数
        }
        
        // 计算数组中不同数字的总个数
        for (int j = 0; j < 10; j++) {
            if (arr[j] != 0)
                sum++;  // 如果数组中的某个位置不为0,说明该数字出现过,sum加1
        }
        
        // 如果数组中不同数字的总个数和目标个数相等,进行输出
        if (sum == weishu) {
            printf("%d %04d", i - year, i);  // 输出相差的年数和目标年份
            break;  // 找到目标年份后,跳出循环
        }
        
        // 将数组和数字总个数初始化为0,以便下一次循环使用
        for (int i = 0; i < 10; i++) {
            arr[i] = 0;
        }
        sum = 0;
    }
    
    return 0;
}

全部评论

相关推荐

真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务