牛客编程语言练习赛第十场全题解

牛客比赛官网:https://ac.nowcoder.com/acm/contest/6632

出生日期输入输出

题目描述
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。

输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。

示例1
输入
20130225
输出
year=2013
month=02
date=25

备注:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。

这里要普及一下:C++中substr的用法

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    cout<<"year="<<s.substr(0,4)<<endl
        <<"month="<<s.substr(4,2)<<endl
        <<"date="<<s.substr(6,2);
    return 0;
}

字符金字塔

题目描述
输入一个字符,用它构造一个三角形金字塔。

输入描述:
输入只有一行,一个字符。
输出描述:
该字符构成的三角形金字塔。

示例1
输入
1
输出
在这里插入图片描述

共5行,每行按格式输出,换行,注意空格

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char c;
    cin>>c;
    cout<<"    "<<c<<endl
        <<"   "<<c<<" "<<c<<endl
        <<"  "<<c<<" "<<c<<" "<<c<<endl
        <<" "<<c<<" "<<c<<" "<<c<<" "<<c<<endl
        <<c<<" "<<c<<" "<<c<<" "<<c<<" "<<c;
    return 0;
}

大小写转换

题目描述
实现字母的大小写转换。多组输入输出。

输入描述:
多组输入,每一行输入大写字母。
输出描述:
针对每组输入输出对应的小写字母。

示例1
输入
A
B
输出
a
b

备注:
多组输入过程中要注意“回车”也是字母,所以要“吸收”(getchar())掉该字母。

注意点在备注中已经给出,下面给出两种解法。

#include <stdio.h>
int main()
{
    char ch;
    while((ch=getchar())!=EOF)
    {
        if(ch>='A'&&ch<='Z')    ch+=32;
        putchar(ch);
    }
}
/*
另一种解法:用库函数具有可移植性,若是不用ASCII码的程序,+-32是无效的;
#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char ch;
    while(scanf("%c", &ch) == 1)
    {
        putchar(tolower(ch));
        getchar();
    }
    return 0;
}
*/

KiKi和酸奶

题目描述
BoBo买了一箱酸奶,里面有n盒未打开的酸奶,KiKi喜欢喝酸奶,第一时间发现了酸奶。KiKi每h分钟能喝光一盒酸奶,并且KiKi在喝光一盒酸奶之前不会喝另一个,那么经过m分钟后还有多少盒未打开的酸奶?

输入描述:
多组输入,每组输入仅一行,包括n,h和m(均为整数)。输入数据保证m <= n * h。
输出描述:
针对每组输入,输出也仅一行,剩下的未打开的酸奶盒数。

示例1
输入
8 5 16
输出
4

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n=0, h=0, m=0;
    //循环读入n,h,m
    while(scanf("%d %d %d", &n, &h, &m) != EOF) 
    {
        //判断是否能够整除,如果可以输出 n-m/h),反之减1
        if(m%h == 0)    printf("%d\n", n - (m / h));
        else    printf("%d\n", n-(m/h)-1);
    }
    return 0;
}

衡量人体胖瘦程度

在这里插入图片描述
输入描述:
多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)。
输出描述:
针对每行输入,输出为一行,人体胖瘦程度,即分类。

示例1
输入
80 170
60 170
90 160
50 185
输出
Overweight
Normal
Obese
Underweight

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int weight=0, height=0;
    float BMI=0.f;
    //循环读入体重和身高
    while(scanf("%d %d", &weight, &height) != EOF) 
    {
        //根据公式计算BMI
        BMI = weight / (height/100.f * height/100.f);
        //使用if else嵌套判断BMI所在的区间,输出即可
        if(BMI < 18.5f)     printf("Underweight\n");
        else if(BMI >=18.5f && BMI <= 23.9f)    printf("Normal\n");
        else if(BMI > 23.9f && BMI <= 27.9f)     printf("Overweight\n");
        else     printf("Obese\n");
    }
    return 0;
}

获得月份天数

题目描述
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。

输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。

示例1
输入
2008 2
输出
29

#include <stdio.h>
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)    b=31;
        else if(b==2) {
            b=28;
            if((a%400==0)||(a%4==0&&a%100!=0))    b++;
        }
        else     b=30;
        printf("%d\n",b);
    }
}

竞选社长

题目描述
假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长.

输入描述:
一行,字符序列,包含A或B,输入以字符0结束。
输出描述:
一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。

示例1
输入
ABBABBAAB0
输出
B

遍历读入的字符串,统计A和B的个数,最后用 if判断一下,对应输出即可。

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    char a[1010];
    int cc1 = 0, cc2 = 0;
     
    scanf("%s", a);
    int n = strlen(a);
    for (int i=0; i<n-1; i++) {
        if (a[i]=='A')  cc1++;
        else  cc2++;
    }
    if(cc1>cc2)  puts("A");
    else if(cc1<cc2)  puts("B");
    else  puts("E");
}

K形图案

题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的K形图案。
输入描述:
多组输入,一个整数(2~20)。

输出描述:
针对每行输入,输出用星号组成的K形,每个“*”后面有一个空格。

示例1
输入
2
输出
在这里插入图片描述

示例2
输入
3
输出
在这里插入图片描述
示例3
输入
4
输出
在这里插入图片描述

这题就很奇怪,自己的输出完全符合样例,就是没过…先贴上去做个错误示范,明天五点半起床练车,时间有点赶

#include <stdio.h>
int main()
{
    int i,j,k,n;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1; i<=n; i++)
        {
            printf("* ");    
            for(j=1;j<=n-i+1;j++)    printf("* ");
            for(k=0; k<i-1; k++)    printf(" ");
            printf("\n");
        }
        for(i=1; i<=n+1; i++)
        {
            printf("*");
            for(j=1; j<=i-1; j++)    printf(" *");
            for(k=0; k<=n-i+1; k++)    printf(" ");
            printf("\n");
        }                                   
    }
    return 0;
 }
 /*
没通过的
#include <bits/stdc++.h>
using namespace std;

int main() 
{
	int n;
    while(cin>>n)
    {
    	for(int i=n+1; i>=1; i--)
    	{
    		for(int j=1; j<=i ;j++)  cout<<"*"<<" ";
    		cout<<endl;
		}
		for(int i=2; i<=n+1; i++)
		{
			for(int j=1; j<=i; j++)  cout<<"*"<<" ";
			cout<<endl;
		}
	}
    return 0;
}
 */

正斜线形图案

题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用星号组成的正斜线形图案。

输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成正斜线的星号的数量。
输出描述:
针对每行输入,输出用星号组成的正斜线。

示例1
输入
4
输出
在这里插入图片描述

示例2
输入
5
输出
在这里插入图片描述

与之前斜线图案类似,修改空格的控制即可

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n = 0;
    while(scanf("%d", &n) != EOF) 
    {
        int space = n-1;
        for(int i=0; i<n; ++i)
         {
            for(int j=0; j<space; ++j)    printf(" ");
            printf("*");
            for(int k=0; k<i; ++k)    printf(" ");
            printf("\n");
            space--;
        }
    }
    return 0;
}

X形图案

题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用星号组成的X形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述:
针对每行输入,输出用“*”组成的X形图案。

示例1
输入
5
输出
在这里插入图片描述

示例2
输入
6
输出
在这里插入图片描述

找出规律,然后判断是否满足情况输出即可。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    while (scanf("%d", &n) != EOF)
     {
        for(int i=0; i<n; ++i)
         {
            for(int j=0; j<n; ++j)
             {
                if(i==j)    printf("*");
                else if(j == n-i-1)     printf("*");
                else     printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米莱虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值