6翻了

描述:

“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入格式:

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

输入样例:

it is so 666 really 6666 what else can I say 6666666666

输出样例:

it is so 666 really 9 what else can I say 27

代码:

#include<stdio.h>
#include<string.h>
int main(){
    char s[1005];
    gets(s);
    for(int i=0;i<strlen(s);i++){
        if(s[i]=='6'){
            int len = 1;
            int j = i;
            while(1){
                j++;
                if(s[j]=='6'){
                    len++;
                }
                else{
                    break;
                }
            }
            if(len<=3){
                for(int k=i;k<len+i;k++){
                    printf("%c",s[k]);
                }
                i = j-1;
            }
            else    if(len>3&&len<9){
                printf("9");
                i = j-1;
            }
            else    if(len>9){
                printf("27");
                i = j-1;
            }
        }
        else{
            printf("%c",s[i]);
        }
    }
    return 0;
} 

解析:

遍历整个字符串,判断里面所有的6字符,有判断连续6字符的数量,并记录最后结束时的位置,然后将满足条件的对应输出,不符合条件的输出对应字符串。最后让ii = j - 1,j是最后的位置,减一是因为循环结束时i++

然后是几点

描述:

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入格式:

输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输出格式:

输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

代码:

//字符法
#include<stdio.h>
#include<string.h>
int main() {
    char time[4];
    scanf("%s",time);
    int t;
    scanf("%d",&t);
    int h = 0;
    int m = 0;
    if(strlen(time)==4) {
        h += time[0]-'0';
        h *=10;
        h += time[1]-'0';
        m += time[2]-'0';
        m *= 10;
        m += time[3]-'0';
    } else  if(strlen(time)==3) {
        h += time[0]-'0';
        m += time[1]-'0';
        m *= 10;
        m += time[2]-'0';
    }
    int M = 60*h+m+t;
    h = M/60;
    m = M%60;
    printf("%d%02d",h,m);   
    return 0;
}

解析:

根据给定的数字长度判断小时是几位数。并将其转化为整型,最后小时和分钟全部转换为分钟,然后输出对应的时间,这道题的坑点就是分钟需要为两位数。

代码:

//数字法
#include<stdio.h>
int main()
{
    int x,a,b,c,t;
    scanf("%d %d",&x,&a);
    if(a>=0)
    {
        b=x/100;
        c=x-b*100;
        t=a/60;
        b=b+t;
        t=a%60;
        c=c+t;
        if(c>=60)
        {
            b++;
            c=c-60;
        }
    }
    else
    {
        b=x/100;
        c=x-b*100;
        t=a/60;
        b=b+t;
        t=a%60;
        c=c+t;
        if(c<0)
        {
            b--;
            c=60+c;
        }
    }   
    printf("%d%02d",b,c);
    return 0;
}

解析:

将两个数字接收后,计算出小时和分钟,当输入的分钟大于等于零时,将分钟大于60的,加到小时上,不足60的当作分钟输出,当输入的小于零时,当分钟小于零时进行借位,小时-1,分钟+60最后加上要减去的分钟。


一只小菜鸡