PTA L1-033 出生年 (15 分) C

L1-033 出生年 (15 分)


以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓”n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001

#include<stdio.h>
#include<string.h>
void string_process(char t[]){
/*用于在输入的年份前面补零*/
    int i=3,index=strlen(t);
    if(index-1==i)
        return ;
    while(index>0){
        t[i]=t[index-1];
        i--;
        index--;
    }
    while(i>=0){
        t[i]='0';
        i--;
    }
}
int string_diff(char t[]){
/*判断字符串t中有多少个不同的字母*/
    int i,j,flag;
    char temp[5]={'\0'};
    for(i=0;i<4;i++){
        flag=1;
        for(j=0;j<strlen(temp);j++){
            if(t[i]==temp[j])
                flag=0;
        }
        if(flag)
            temp[j]=t[i];
    }
    return strlen(temp);
}
void add_char(char t[]){
/*将年份增加一年*/
    int len,i;
    len=strlen(t);
    t[len-1]++;
    for(i=len-1;i>=0;i--){
        if(t[i]>'9'){
            t[i]='0';
            t[i-1]++;
        }
    }
}
int main(void){
    int n,diff=0;
    char birth[5]={'\0'};
    scanf("%s %d",birth,&n);
    string_process(birth);
    while(1){
        if(string_diff(birth)==n){
            printf("%d %s",diff,birth);
            break;
        }
        add_char(birth);
        diff++;
    }
}

原文地址:https://www.cnblogs.com/nonlinearthink/p/10901683.html

时间: 2024-10-07 20:20:05

PTA L1-033 出生年 (15 分) C的相关文章

PTA 7-5 兔子繁衍问题 (15分)

#include<stdio.h> int main() { int x,i; int a=2, b=0, c=0; scanf("%d", &x); if (x > 1) { for (i = 1; c < x; i++) { c = a + b; b = a; a = c; } printf("%d", i+1); } else printf("1"); return 0; } 原文地址:https://blo

PTA | 1056 组合数的和 (15分)

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入格式: 输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字.数字间以空格分隔. 输出格式: 输出所有可能组合出来的2位数字的和. 输入样例: 3 2 8 5 输出样例: 330 Code: 对于每一个输入的数字temp,都能和其他N-1

习题2.5 两个有序链表序列的合并(15 分)&lt;有疑问?L1 L2 没办法变空&gt;

习题2.5 两个有序链表序列的合并(15 分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode L

pta 数据结构 习题2.4 递增的整数序列链表的插入(15 分)

习题2.4 递增的整数序列链表的插入(15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List L, ElementType X ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; type

PAT-JAVA-5-2 然后是几点 (15分)

5-2 然后是几点   (15分) 有时候人们用四位数字表示一个时间,比如1106表示11点零6分.现在,你的程序要根据起始时间和流逝的时间计算出终止时间. 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字.当小时为个位数时,没有前导的零,即5点30分表示为530.注意,第二个数字表示的分钟数可能超过60,也可能是负数. 输入格式: 输入在一行中给出2个整数,分别是四位数字表示的起始时间.以及流逝的分钟数,其间以

1001 害死人不偿命的(3n+1)猜想 (15)(15 分)

1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展-- 我们今天的题目不是证明卡

1006 换个格式输出整数 (15)(15 分)

1006 换个格式输出整数 (15)(15 分) 让我们用字母B来表示"百".字母S表示"十",用"12...n"来表示个位数字n(&lt10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它有2个"百".3个"十".以及个位的4. 输入格式:每个测试输入包含1个测试用例,给出正整数n(&lt1000). 输出格式:每个测试用例的输出占一行,用规定的

7-36 复数四则运算(15 分)

7-36 7-36 复数四则运算(15 分) 本题要求编写程序,计算2个复数的和.差.积.商. 输入格式: 输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部.题目保证C2不为0. 输出格式: 分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和.差.积.商,数字精确到小数点后1位.如果结果的实部或者虚部为0,则不输出.如果结果为0,则输出0.0. 输入样例1: 2 3.08 -2.04 5.06

[PAT B1036]跟奥巴马一起编程(15分)

1036 跟奥巴马一起编程(15)(15 分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形.现在你也跟他一起画吧! 输入格式:输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格. 输出格式:输出由给定字符C画出的正方形.但是注意到行间距比列间距大,所以为了让结果看上去更像正方形