C语言刷题训练营-第四讲

BC23-时间转换

https://www.nowcoder.com/practice/c4ae7bcac7f9491b8be82ee516a94899?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

给定秒数seconds (0< seconds < 100,000,000),把秒转化成小时、分钟和秒。

输入描述:

一行,包括一个整数,即给定的秒数。

输出描述:

一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。

示例1
输入

3661

输出

1 1 1

参考答案:

#include <stdio.h>
int main()
{
   int sec = 0;
   scanf("%d", &sec);
   int h = sec/60/60;
   int m = sec/60%60;
   int s = sec%60;
   printf("%d %d %d\n", h,m,s);
   return 0;
}
#include<stdio.h>
int main()
{
    int tmp=0;
    scanf("%d",&tmp);
    int hour=tmp/3600;
    int min=(tmp/60)-(hour*60);
    int sec=tmp-(hour*3600)-(min*60);
    printf("%d %d %d",hour,min,sec);
    return 0;
}

答案解析:

计算好对应的数字,按照格式打印就行。

 

BC24-总成绩和平均分的计算

https://www.nowcoder.com/practice/0fa5132c156b434da4347ad051c4be22?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

依次输入一个学生的3科成绩,在屏幕上输出该学生的总成绩以及平均成绩。

输入描述:

一行,3科成绩,成绩之间用一个空格隔开。

输出描述:

一行,总成绩和平均成绩(小数点后保留两位),用一个空格隔开。

示例1
输入

79.5 80.0 98.0

输出

257.50 85.83

参考答案:
 

#include <stdio.h>
int main()
{
   int i = 0;
   float sum = 0.0;
   float avg = 0.0;
   float score = 0.0;
   for(i=0; i<3; i++)
{
       scanf("%f", &score);
       sum += score;
}
   printf("%.2f %.2f\n", sum, sum/3.0);
   return 0;
}

 

#include<stdio.h>
int main()
{
    float a,b,c,sum,ave;
    scanf("%f %f %f",&a,&b,&c);
    sum=a+b+c;
    ave=sum/3.0;
    printf("%.2f %.2f",sum,ave);
    return 0;
}

答案解析:

1. 本题在接收数据的同时就可以计算分数的总和,不一定非要等数据全部接收完毕。
2. 按照格式打印就行。
 

BC30-kiki和酸奶

https://www.nowcoder.com/practice/c7721f3a1b1a47a783974453e82cadbb?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

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

输入描述:

多组输入,每组输入仅一行,包括n,h和m(均为整数)。输入数据保证m <= n * h。

输出描述:

针对每组输入,输出也仅一行,剩下的未打开的酸奶盒数。

示例1
输入

8 5 16

输出

4

参考答案:
 

#include <stdio.h>
int main()
{
   int n = 0;
   int h = 0;
   int m = 0;
   while(scanf("%d %d %d", &n, &h, &m) != EOF)
    {
       if(m%h>0)
           printf("%d\n", n-m/h-1);
       else
           printf("%d\n", n-m/h);
    }
   return 0;
}

答案解析:

1. 注意多组输入
2. 如果h分钟喝一瓶酸奶,那么m分钟喝汽水的瓶数就是h/m瓶,但是如果m%h有余数,就说明又打
开了一瓶,只是没来得及喝完,那么位打开的就少一瓶。
 

BC31-发布会信息

https://www.nowcoder.com/practice/20e59d0f388448c68f581b9d3ca66049?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

你的手机丢了,在屏幕上输出信息告诉大家。

输入描述:

输出描述:

I lost my cellphone!

参考代码:

#include <stdio.h>
int main()
{
   printf("I lost my cellphone!\n");
   return 0;
}

答案解析:

本题是个入门题目,直接按照要求输出结果就是了。
 

BC32-输出学生信息

https://www.nowcoder.com/practice/8e94458049eb4e838f711bbd1be0045e?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

学生信息管理系统是学校教学管理的重要工具,现有一名学生基本信息如下:姓名-Jack,年龄-18,性别-Man,请按照输出样例的格式输出该学生的信息。

输入描述:

输出描述:

输出分为三行,分别为标题行,分隔行,信息行。
第一行,标题行,每个标题之间间隔4个空格。
第二行,分隔行,一共21个减号"-"。
第三行,信息行,每列输出信息和标题首字母对齐。输出样例如下:

Name    Age    Gender
---------------------
Jack    18     man

参考答案:

#include<stdio.h>
int main()
{
    printf("Name    Age    Gender\n");
    printf("---------------------\n");
    printf("Jack    18     man\n");
    return 0;
}

答案解析:

这是一个简单题,按照题目要求的格式输出就行了。
 

BC33-计算平均成绩

https://www.nowcoder.com/practice/30a28eb88c3f4e87be1a5b397ddd6fe2?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

从键盘输入5个学生的成绩(整数),求他们的平均成绩(浮点数,保留一位小数)。

输入描述:

一行,连续输入5个整数(范围0~100),用空格分隔。

输出描述:

一行,输出5个数的平均数(保留一位小数)。

示例1
输入

75 80 43 67 96

输出

72.2

参考答案:
 

#include <stdio.h>
int main()
{
   int i = 0;
   int sum = 0;
   int input = 0;
   for(i=0; i<5; i++)
    {
       scanf("%d", &input);
       sum += input;
    }
   printf("%.1f\n", sum/5.0);
   return 0;
}

答案解析:

在获取输入数据的同时,计算成绩总和,然后求出平均值,按照格式输出就行。
 

BC34-进制A+B

https://www.nowcoder.com/practice/6187581174ac48278ca3bccf8d534897?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。

输入描述:

一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。

输出描述:

一行,a+b的十进制结果。

示例1
输入

0x12 05

输出

23

备注:

十六进制Hexadecimal一般以0x开头,例如0xFF。八进制Octal,一般以0开头,例如07。

参考代码:

#include<stdio.h>
int main()
{
   int a = 0;
   int b = 0;
   scanf("%x %o", &a, &b);
   int sum = a+b;
   printf("%d\n", sum);
   return 0;
}    

答案解析:

1. 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式。
2. 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x是十六进制格式,%o就是八进制格式。
3. 不同进制的数据存放都整形变量中都是整形值,直接计算就行,计算交给计算机。
 

BC37-网购

https://www.nowcoder.com/practice/5d7dfd405e5f4e4fbfdff6862c46b751?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件
衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双
11或双12使用),求KiKi最终所花的钱数。

输入描述:

一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、
第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。

输出描述:

一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)

示例1
输入

1000.0 11 11 1

输出

650.00

示例2
输入

999.8 12 12 0

输出

799.84

示例3
输入

66.6 11 11 1

输出
0.00
参考代码:
//代码1

#include <stdio.h>
int main()
{
   float price = 0.0;
   int m = 0;
   int d = 0;
   int flag = 0;
   scanf("%f%d%d%d", &price, &m, &d, &flag);
   if(m == 11 && d == 11)
    {
       price *= 0.7;
       if(flag == 1)
       price -= 50;
    }
    else if(m==12 && d == 12)
    {
           price *= 0.8;
           if(flag == 1)
           price -= 50;
    }
       if(price < 0.0)
           price = 0.0;
       printf("%.2f\n", price);
       return 0;
}


//代码2

#include <stdio.h>
int main()
{
   float price = 0.0;
   int m = 0;
   int d = 0;
   int flag = 0;
   float cut = 0;
   scanf("%f%d%d%d", &price, &m, &d, &flag);
   if(m == 11 && d == 11)
    {
       cut = 0.7;
    }
       else if(m==12 && d == 12)
    {
       cut = 0.8;
    }
       price = price*cut-flag*50.0;
       if(price < 0.0)
           price = 0.0;
       printf("%.2f\n", price);
   return 0;
}

答案解析:
1. 本地理解好题目意思,然后计算机就可以
2. 注意抵扣完后价格小于0,只能按照0计算
3. 按照格式输出
 

BC39-争夺前五名

https://www.nowcoder.com/practice/cd052308a1c44a88ad00255f312c3e14?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

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

输入描述:

两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。

输出描述:

一行,输出成绩最高的前五个,用空格分隔。

示例1
输入

6
99 45 78 67 72 88

输出

99 88 78 72 67

参考代码:
//代码1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}
int main()
{
    int n = 0;
    int score[40] = { 0 };
    scanf("%d", &n);
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &score[i]);
    }
    //对所有数字排序
    int j = 0;
    //使用库函数排序
    qsort(score, n, 4, cmp_int);
    for (i = 0; i < 5; i++)
    {
        printf("%d ", score[--n]);
    }
    return 0;
}

//代码2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int n = 0;
    int score[40] = { 0 };
    scanf("%d", &n);
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &score[i]);
    }

    //对所有数字排序-冒泡排序
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (score[j] < score[j + 1])
            {
                int tmp = score[j];
                score[j] = score[j + 1];
                score[j + 1] = tmp;
            }
        }
    }
    for (i = 0; i < 5; i++)
    {
        printf("%d ", score[i]);
    }
    return 0;
}

答案解析:

1. 要学会使用C语言库函数提供qsort函数。
2. 或者自己实现一个简单的整形数组排序代码。
 

BC40-竞选社长

https://www.nowcoder.com/practice/45a30e3ef51040ed8a7674984d6d1553?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

题目描述

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

输入描述:

一行,字符序列,包含A或B,输入以字符0结束。

输出描述:

一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。

示例1
输入

ABBABBAAB0

输出

B

参考代码:

#include<stdio.h>
int main()
{
    char ch = 0;
    char ret = 0;
    int count_A = 0;
    int count_B = 0;
    while (((ch = getchar()) != '0') && ch != EOF)
    {
        if (ch == 'A')
            count_A++;
        else
            count_B++;
    }
    if (count_A > count_B)
        ret = 'A';
    else if (count_A < count_B)
        ret = 'B';
    else if (count_A == count_B)
        ret = 'E';
    printf("%c\n", ret);
    return 0;
}

 

答案解析:
1. 本题有很多解法。
2. 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者'0')。
3. 剩余的工作就是统计个数后,然后根据情况按照格式输出。
 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值