【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第1张图片

本文作者:大家好,我是原始豌豆,欢迎来到牛客网刷题解析第二期,感谢你阅读本文欢迎评论,收藏,点赞哦。
内容专栏:这里是《牛客网在线编程》专栏,笔者用重金(时间和精力)打造,每道题目提供多种解法,从基础到拓展,希望可以帮到读者们。
写作不易:本文对每道题目提供了多种解法并加上了详细的注释,意在帮助读者锻炼思维灵活性,提高分析、解决问题的能力)。
    牛客网刷题解析第三期请点这里

开端
     在这篇文章中,我将分享刷题过程中的一些感悟、技巧和策略。我会详细解析173道语法题,通过实例来展示如何理解和运用C语言的语法规则。同时,我也会分享一些个人的学习心得和经验,希望能帮助到同样热爱编程的你。

     挑战自己的极限,收获编程的乐趣,让我们一起踏上这段奇妙的C语言刷题之旅吧!!!!

题目目录

牛客网语法篇基础语法16-30题(C语言实现)
题目网址链接请点这✌️
标注*符号的题目为重点题目
本页目录跳转请点下方

BC16 十六进制转十进制*
BC17 缩短二进制
BC18 牛牛的空格分隔
BC19 牛牛的对齐
BC20 进制A + B
BC21 牛牛学加法
BC22 牛牛学除法
BC23 牛牛学取余
BC24 浮点数的个位数字*
BC25 牛牛买电影票
BC26 计算带余除法
BC27 整数的个位
BC28 整数的十位
BC29 开学?*
BC30 时间转换

题目

>BC16 十六进制转十进制

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第2张图片
解法一
  直接利用打印十进制的%d格式符打印16进制数,会自动转换为10进制

#include 
int main() {
    int num = 0xABCDEF;
    printf("%15d", num);// 在%和格式字符之间插入一个整型常数来指定输出的宽度n。//不足用空格补齐,右对齐
    return 0;
}

解法二
   用数学上进制转换的方法

#include 
#include
int main() {
    int j = 0; int k = 0;//j控制16进制的权值从右向左是从零开始的。 
    int num[6] = { 0xA, 0xB, 0xC, 0xD, 0xE,0xF };
    for (int i = 5; i >= 0; i--) {
        num[i] *= (int)pow(16, j++);
        k = k + num[i];//k用于累加每位转换后对应的十进制数字
    }
    printf("%15d", k);
    return 0;
}

BC17 缩短二进制

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第3张图片
解法一

//补充知识:
//   o 以八进制形式输出无符号整数(不输出前缀O)
//   x 以十六进制形式输出无符号整数(不输出前缀Ox)
//   X 以十六进制形式输出无符号整数(不输出前缀OX)(大写)
//使用修饰符“#”控制前导显示:
//   # 对c,s,d,u类无影响;对o类, 在输出时加前缀0。对x类,在输出时加前缀0x;
//注意:题目要求,十六进制,字母大写,所以,,,,,,对X类,在输出时加前缀0X。
#include 
int main()
{
    int a = 1234;
    printf("%#o %#X", a, a);//使用 printf 函数,以 %#o 和 %#X 格式打印变量 a 的值。
    return 0;
}

解法二
  题目要显示前导0和前导0X,那我们直接在%的前面加上前导0和前导0X就行了

#include 
int main()
{
    int a = 1234;
    printf("0%o 0X%X", a, a);//使用 printf 函数,以 %#o 和 %#X 格式打印变量 a 的值。
    return 0;
}

BC18 牛牛的空格分隔

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第4张图片
解法一

//解法一
#include 
int main() {
    char ch;
    int num;
    float f;
    scanf("%c%d%f", &ch, &num, &f);//注意,本题是字符先输入的,所以不会出问题,如果整形先输入,会留下回车'\n'字符在输入缓冲区,然后被ch读取,造成错误
    printf("%c %d %.6f", ch, num, f);
    return 0;
}

BC19 牛牛的对齐

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第5张图片
解法一
注意格式即可

#include 
int main()
{
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    printf("%d%8d%8d", a, b, c);//%8d右对齐
    //printf("%-8d%-8d%d", a, b, c);//两种写法都可以,-8d左对齐
}

BC20 进制A + B

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第6张图片
解法一

#include 
int main() {
    int a, b;
    scanf("%x%o", &a, &b);//注意格式
    printf("%d", a + b);
    return 0;
}

BC21 牛牛学加法

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第7张图片
解法一

#include 
int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    if (a >= 0 && b <= 1000 )//判断输入数据的范围
        printf("%d", a + b);
    return 0;
}

BC22 牛牛学除法

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第8张图片
解法一

#include 
int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d", a / b);//整数除法会截断取整
    return 0;
}

BC23 牛牛学取余

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第9张图片
解法一

#include 
//取余运算符的两边操作数只能为整数
int main()
{
    int a = 0, b = 0;
    scanf("%d %d", &a, &b);
    printf("%d", a % b);
    return 0;
}

BC24 浮点数的个位数字

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第10张图片
解法一
   强制类型转换,然后取余数

#include 
int main() {  
    float num = 0.0f;  // 声明一个浮点数变量,并初始化为0.0  
    scanf("%f", &num);  // 从标准输入读取一个浮点数并存储在num中  
  
    // 判断num是否大于0且小于200或者等于200  
    if (num > 0 && num <= 200) {  
        int num2 = (int)num;  // 将num转换为整数  
        printf("%d", num2 % 10);  // 输出num2除以10的余数 
    }  
    return 0;  
}

解法二
   利用modf函数取出浮点数的整数部分存到num2中

#include 
#include 
int main() {
    double num1 ;// 声明一个双精度浮点数变量num1
    double num2;// 声明一个双精度浮点数变量num2  
    scanf("%f", &num1);
    modf(num1, &num2); // 使用modf函数将num1分解为整数部分和小数部分,并将整数部分存储在num2中  
    printf("%d", (int)num2 % 10);//这里一定要加强制转换为整型,因为取模运算操作数要求为整型,num2里存放的虽然是整数,但不是整型整数,而是浮点型整数,这点要注意好
    return 0;
}
//C 库函数 double modf(double x, double *integer) 返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。

解法三
   利用指针解引用指向的元素判断小数点的位置,输出小数点前的元素即为浮点数对应的个位数

#include 
int main() {
    char num[100] = {'\0'};
    scanf("%s", num);
    char* p = num;//p里存放的num首元素的地址
    while (*p != '.') {
        p++;//指针自增
    }
    printf("%c", *(p - 1));//打印
    return 0;
}

BC25 牛牛买电影票

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第11张图片
解法一
   简单的乘法运算

#include 
int main() {
    int fee = 100;
    int x;
    scanf("%d", &x);
    printf("%d", fee * x);//计算票钱*人数
    return 0;
}

BC26 计算带余除法

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第12张图片
解法一

#include 
int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    if (a > 0 && b < 10000)//检查a是否大于0且b是否小于10000。只有当这两个条件都满足时,才会执行下面的代码块。
        printf("%d %d", a / b, a % b);//使用printf函数输出a除以b的商和余数。%d是一个格式说明符,表示要输出的是一个整数。
    return 0;
}

BC27 整数的个位

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第13张图片
解法一
   本题不用分类讨论a是否大于9,即使a小于9,用10取余依旧会得到它本身,比如0除9商0余9

#include 
int main()
{
    int a;
    scanf("%d", &a);
    printf("%d %d", a % 10);//通过取模运算得到a的个位数。例如,如果a是123,那么a % 10的结果是3。
   return 0;
}

BC28 整数的十位

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第14张图片
解法一

#include 
int main()
{
    int a;
    scanf("%d",&a);
    printf("%d",a%100/10);//首先通过取模运算得到a的后两位数。然后通过除法运算得到a的十位数。例如,如果a是123,那么a % 100的结果是23,再除以10得到2。
    return 0;    
}

BC29 开学

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第15张图片
解法一
   星期几+天数如果小于等于7,直接相加的就是往后推X天变成星期几,如果相加大于7,就除7看是否能整除,能整除就是星期日,不能整除余数是几就是星期几。

//解法一
#include 
int main() {
    int date1, days;  //定义date1变量表示初始星期几,days表示天数
    scanf("%d%d", &date1, &days);
    if (date1 + days < 8)   //如果date1+days小于等于7,直接相加的就是往后推X天变成星期几
        printf("%d", date1 + days);
    else
    {
        if ((date1 + days) % 7 == 0)   //如果相加大于7,就除7看是否能整除,能整除就是星期日
            printf("7");
        else
            printf("%d", (date1 + days) % 7);//不能整除余数是几就是星期几
    }
    return 0;
}

解法二
   不用考虑星期几+天数是不是大于或小于7,即使小于7,(X+N)%7之后商零,余数等于被除数

#include 
int main()
{
    int X, N, res;
    scanf("%d %d", &X, &N);//不用x+n考虑是不是大于或小于7,即使小于7,(X+N)%7之后商零,余数等于被除数
    res = (X + N) % 7;
    printf("%d", res ? res : 7);//(x+n)%7未被整除的情况下,res为真,表达式结果就是res的值,   被整除的情况下,res为0,打印7
    return 0;
}

解法三
   思路–> 原天数和延期天数之和少一天(2≤X+N≤1007),取余以后再加回去,以避免出现周日7倍数,结果为0的情况

#include 
int main()
{
	int  Week, Day;
	scanf("%d%d", &Week, &Day);
	printf("%d\n", (Week + Day - 1) % 7 + 1); //避免出现周日余数为0,兼顾简洁易懂
	return 0;
}

BC30 时间转换

【牛客网题目解析:从入门到精通】173道基础题详解 (第二期)_第16张图片
解法一

#include 
int main() {
    int seconds; // 声明一个整数变量seconds,用于存储用户输入的秒数。  
    int hour, min, sec;// 声明整数变量hour、min和sec,分别用于存储转换后的小时、分钟和秒。
    scanf("%d", &seconds);
    hour = seconds / 3600;// 将总秒数除以3600,得到小时数。  
    min = seconds % 3600 / 60;// 首先用取模运算符%得到不能被转换为小时的剩余秒数,然后除以60得到分钟数
    // sec=seconds%3600%60;//剩余秒数的一种计算方法
    sec = seconds % 60;//剩余秒数也可以直接总秒数%60,算出来的就是去掉被转换成小时和分钟的秒数,剩余的凑不够60s的秒数
    printf("%d %d %d", hour, min, sec);
    return 0;
}

总结:
    回顾整个解析过程,我们发现C语言语法是基础中的基础,对于初学者来说,掌握基础语法是至关重要的。通过题目,我们可以快速巩固和加深对基础语法的理解。同时,也能够帮助我们提高编程思维和解决问题的能力。一题多解更是为了培养我们的逻辑思维和解决问题的能力。通过不断地刷题和总结,我们可以更好地掌握C语言的核心思想和应用技巧,为未来的学习和工作打下坚实的基础。
    本文对每道题目都提供了多种解法和一些独特的解法,比如利用指针找到小数点位置,获取浮点数个位数。目的在于培养创新思维:一题多解鼓励初学者不满足仅仅得出一道习题的答案,而去追求更独特、更快捷的解题方法,有助于培养创新思维。

                                                       下期再见bye!

牛客网刷题解析第三期请点这里

你可能感兴趣的:(牛客网在线编程,算法,开发语言,c语言,visual,studio)