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

A—printf的返回值


时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?

输入描述:

输出描述:
包括两行:
第一行为“Hello world!”
第二行为printf(“Hello world!”)调用后的返回值。

printf(“Hello world!”)调用后的返回值是输出的内容的长度,定义一个len,将要输出的内容赋值给它,既实现了一次输出,又记录了len,再换行输出len即可

#include 
using namespace std;

int main()
{
    int len = printf("Hello world!");
    printf("\n");
    printf("%d", len);
    return 0;
}

B—计算体重指数

题目描述
问题:计算BMI指数(身体质量指数)。BMI指数(即身体质量指数,简称体质指数又称体重,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。主要用于统计用途,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标。

输入描述:
一行,两个整数,分别表示体重(公斤),身高(厘米),中间用一个空格分隔。
输出描述:
一行,BMI指数(保留两位小数)。

示例1
输入
70 170
输出
24.22

注意单位、数据类型和精度控制

#include 
using namespace std;

int main()
{
    int x,y;
    cin>>x>>y;
    double ans,y1=y/100.0,x1=x/1.0;
    ans=x/(y1*y1);
    printf("%.2f",ans);
    return 0;
}

C—判断是不是字母

题目描述
KiKi想判断输入的字符是不是字母,请帮他编程实现。

输入描述:
多组输入,每一行输入一个字符。
输出描述:
针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见

输出样例
示例1
输入
A
6
输出
A is an alphabet.
6 is not an alphabet.

记住字母的ASCII码,注意连续输入

EOF的意义及用法(while(scanf("%d",&n) != EOF))

#include 
using namespace std;
char s;

int main()
{
	while(cin>>s)
	{
		if(s>=65&&s<=122)  
            printf("%c is an alphabet.\n",s);
		else   
            printf("%c is not an alphabet.\n",s);
    }
    return 0;
}

D—争夺前五名

题目描述
期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入n个学生成绩(不超过40个),输出每组排在前五高的成绩。

输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:
一行,输出成绩最高的前五个,用空格分隔。

示例1
输入
6
99 45 78 67 72 88
输出
99 88 78 72 67

数据很小,sort后按格式输出

#include 
using namespace std;
int n,a[50];

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+1+n);
	cout<<a[n]<<" "<<a[n-1]<<" "<<a[n-2]<<" "<<a[n-3]<<" "<<a[n-4];
    return 0;
}

E—带空格直角三角形图案

题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。

输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即星号的数量,也表示输出行数。
输出描述:
针对每行输入,输出用星号组成的对应长度的直角三角形,每个“*”后面有一个空格。

示例1
输入
5
输出
牛客编程语言练习赛第九场全题解_第1张图片

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

注意有*之前的空格数和 *后面带的空格数及换行

#include 
using namespace std;
 
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n-i; j++)
                printf("  ");
            for(int j=1; j<=i; j++)
                printf("* ");
            puts("");
        }
    }
    return 0;
}

F—筛选法求素数

题目描述
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

输入描述:
多组输入,每行输入一个正整数(不大于100)。
输出描述:
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,第二行,输出数组中2之后0 的个数。每行输出后换行。

示例1
输入
20
输出
2 3 5 7 11 13 17 19
11

模拟一下筛选的过程

#include
using namespace std;

int main()
{
    int n;
    while(cin>>n)
    {
        vector<int> a;
        for(int i=0; i<=n; i++)     a.push_back(0);
        
        for(int i=2; i<=n; i++) 
            if(a[i]==0) 
                for(int j=i*i; j<=n; j=j+i)    a[j]=1;
        
        int sum=-1;
        for(int i=2; i<=n; i++)
        {
            if(a[i]==0)
            {
                cout<<i<<" ";
                sum++;             
            }
        }
        int result = n-2-sum;
        cout<<endl;
        cout<<result<<endl;
    }
    return 0;
}

G—成绩输入输出

题目描述
输入3科成绩,然后把三科成绩输出,成绩为整数形式。

输入描述:
一行,3科成绩,用空格分隔,范围(0~100)。
输出描述:
一行,把3科成绩显示出来,输出格式详见输出样例。

示例1
输入
60 80 90
输出
score1=60,score2=80,score3=90

按照要求输出就好了…

#include 
using namespace std;
 
int main()
{
    int a,b,c;
    scanf("%d%d%d", &a,&b,&c);
    printf("score1=%d,score2=%d,score3=%d\n", a,b,c);
}

H—计算球体的体积

题目描述
给定一个球体的半径,计算其体积。其中球体体积公式为 V = 4/3*πr3,其中 π= 3.1415926。

输入描述:
一行,用浮点数表示的球体的半径。
输出描述:
一行,球体的体积,小数点后保留3位。

示例1
输入
3.0
输出
113.097

知道体积公式,注意数据类型(一般PI为3.14也够用了)

#include
using namespace std;
const double PI = 3.1415926;
 
int main()
{
//    ios::sync_with_stdio(false);
//    cin.tie(0); cout.tie(0);
//  freopen("in.txt", "r", stdin);
//  freopen("out.txt", "w", stdout);
    double r;
    while(cin >> r) {
        printf("%.3f\n", (4.0/3) * PI * r*r*r);
    }
    return 0;
}

I—计算单位阶跃函数

牛客编程语言练习赛第九场全题解_第2张图片
示例1
输入
11
0
-11
输出
1
0.5
0

条件判断输出

#include 
using namespace std;
 
int main()
{
    int t;
    while(cin >> t)
    {
        if (t>0)  puts("1");
        else if (t==0)  puts("0.5");
        else  puts("0");
    }
    return 0;
}

J—空心正方形图案

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

输入描述:
多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的星号的数量。
输出描述:
针对每行输入,输出用“*”组成的“空心”正方形,每个星号后面有一个空格。

示例1
输入
4
输出
牛客编程语言练习赛第九场全题解_第3张图片

示例2
输入
5
输出
牛客编程语言练习赛第九场全题解_第4张图片

首尾行与中间部分分类谈论,注意空格数

#include
using namespace std;

int main()
{
    int n;
    while(cin >> n)
    {
        for(int i=1; i<=n; i++)
        {
            if(i==1 || i==n)
            {
                for(int j=1; j<=n; j++)
                    printf("* ");
                puts("");
                continue;
            }
            printf("* ");
            for(int i=1; i<=n-2; i++)
                printf("  ");
            puts("* ");
        }
    }
    return 0;
}

你可能感兴趣的:(题解)