每日一练

 目录

1.1

1086:题目描述  输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

1.2  答案:

2.1

1087:题目描述  输入某人的18位身份证号,输出其出生日期。

2.1  答案1:  答案2:


1.1

1086:题目描述

输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

输入

输入数据有多组,每组占一行,由三个字符组成,之间无空格。

输出

对于每组输入数据,输出一行,字符中间用一个空格分开。

1.2

答案:

#include<stdio.h>
int main()
{
    char x[4],t;
    int a,b,i=0;
    while(scanf("%c%c%c",&x[0],&x[1],&x[2])!=EOF)
    {
        fflush(stdin);
        for(a=0; a<2; a++)
            for(b=0; b<2-a; b++)
                if(x[b]>x[b+1])
                {
                    t=x[b];
                    x[b]=x[b+1];
                    x[b+1]=t;
                }
        for(i=0; i<3; i++)
            printf("%c ",x[i]);
        printf("\n");
    }

    return 0;
}

2.1

1087:题目描述

输入某人的18位身份证号,输出其出生日期。

输入

多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。

输出

对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。

2.1

答案1:

#include<stdio.h>
int main()
{
    char x[19];
    int i,n;
    scanf("%d",&n);
    getchar();
    for(n; n>=1; n--)
    {
        for(i=0; i<18; i++)
            scanf("%c",&x[i]);
        printf("%d%d%d%d-%d%d-%d%d\n",x[6]-48,x[7]-48,x[8]-48,x[9]-48,x[10]-48,x[11]-48,x[12]-48,x[13]-48);
        scanf("%c",&x[0]);
    }

    return 0;
}

答案2:

#include<stdio.h>
int main()
{
    int n,x,y,z,a;
    scanf("%d",&n); 
    for(n; n>=1; n--)
    {
        scanf("%6d",&x);
        scanf("%4d",&y);
        scanf("%2d",&z);
        scanf("%2d",&a);
        fflush(stdin);
        printf("%d-%02d-%02d\n",y,z,a);
    }
    return 0;
}

ps:昨天没空,敲代码卡住了,今天补上.

第一题答案解析:第一次写的时候,没注意输入的回车,下一次循环总是少读取一个,卡了半天,难受。

然后是什么时候终止程序,搞了好久才成功,EOF为判定整型,没强制转换编译也给过了,行吧。然后是oj判定问题,我用fflush(stdin)清空内存缓存区来解决回车误读取和输入不规范(输多)问题,增加代码容错性。但是oj判定答案错误,不知道为啥,然后我去搜了下答案,发现了另一种写法,前面正常读取,最后加个读取x[0]来取代误读取的回车,oj这个给过了emmm血压拉满了。

第二题答案解析:答案一:简单粗暴,用字符型读取数字,可以一个一个读取,0对应ASCLL为48。

答案二:%md,m为数字,代表读取几个数字,开头读取,然后循环,如果一行数字没读完后面循环会继续读,不够则空着;记得加fflush(stdin)清空内存缓存取(本行中,除了要读取的列数,其他列数清空)

输出%02d代表输出两列(两位数),不足补0,如1,输出01.

例如:

410104198202095479

第一次循环:x=410106, y=1982,z=02,a=09.输出1982-02-09

第二次循环:x=8657(第一次读取时未读取剩下部分,因为回车,不够位数空着,超过位数则由y继续读取),y=4101,z=04,a=19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值