• 【每日进步一点点】C语言刷题技巧及训练4


    🌕写在前面:


    C语言刷题技巧及训练 这个专栏距离上次更新过去了一个学期,这次趁着暑假,准备一周更一篇,把这个系列笔记做完。

    在这里插入图片描述
    本专栏适用于刚接触C语言,或者想提升一下,或准备突击期末考试的小伙伴,我相信,刷题有技巧,可举一反三。
    想要更多的练习👇
    点击链接访问牛客网

    在这里插入图片描述

    往 期 推 荐 : \color{Red}往期推荐:
    【每日进步一点点】C语言刷题技巧及训练1
    【每日进步一点点】C语言刷题技巧及训练2
    【每日进步一点点】C语言刷题技巧及训练3

    在这里插入图片描述

    🐬 1.争夺前五名

    题目描述
    期中考试开始了,大家都想取得好成绩,争夺前五名。
    从键盘输入 n n n 个学生成绩(不超过40个),输出每组排在前五高的成绩。
    输入描述
    两行,第一行输入一个整数,表示 n n n 个学生(>=5),第二行输入 n n n 个学生成绩(整数表示:范围 0 0 0~ 100 100 100),用空格隔开
    输出描述
    一行,输出成绩最高的前五个,用空格隔开

    代码如下

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include 
    int main() 
    {
    	//输入
    	int n = 0;//个数
    	int arr[40] = { 0 };//存放成绩
    	scanf("%d", &n);
    	int i = 0;
    	for (i = 0; i < n; i++) 
    	{
    		scanf("%d", &arr[i]);
    	}
    
    	//排序--冒泡排序
    	for (i = 0; i < n - 1; i++)//趟数
    	{
    		//一趟冒泡排序元素进行比较的次数
    		int j = 0;
    		for (j = 0; j < n - 1 - i; j++)
    		{
    			if (arr[j] < arr[j + 1])//降序,大->小
    			{
    				int temp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = temp;
    			}
    		}
    	
    	}
    
    	//输出
    	for (i = 0; i < 5; i++)
    	{
    		printf("%d ", arr[i]);
    	}
    	printf("\n");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    🎨 运行截图

    在这里插入图片描述

    🐬 2.竞选社长

    题目描述
    假如社团要竞选社长,有俩名候选人分别为 A A A B B B,社团每名同学并且只能投一票,最终得票多的人为社长。
    输入描述
    一行,字符序列,包含 A A A B B B,输入以字符 0 0 0 结束
    输出描述
    一行,一个字符, A A A B B B E E E,输出 A A A 表示 A A A 得票数多, 输出 B B B 表示 B B B 得票数多,输出 E E E 表示二人票数相等。


    示例
    输入 ABBBBAAB0
    输出 B

    代码如下

    思路一

    #include 
    int main()
    {
    	char buff[100] = { 0 };
    	//输入
    	gets(buff);
    	//统计
    	int count_a = 0;
    	int count_b = 0;
    	int i = 0;
    	while (buff[i] != '0')
    	{
    		if (buff[i] == 'A')
    		{
    			count_a++;
    		}
    		if (buff[i] == 'B')
    		{
    			count_b++;
    		}
    		i++;
    	}
    	//输出
    	if (count_a > count_b)
    	{
    		printf("A\n");
    	}
    	else if (count_a < count_b)
    	{
    		printf("B\n");
    	}
    	else
    	{
    		printf("E\n");
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    思路二

    #include 
    int main()
    {
    	//输入并统计
    	int ch = 0;
    	int flag = 0;
    	while (((ch = getchar()) != '0') && (ch != EOF))
    	{
    		if (ch == 'A')
    			flag++;
    		else if (ch == 'B')
    			flag--;
    	}
    	
    	//输出
    	if (flag > 0)
    	{
    		printf("A\n");
    	}
    	else if (flag < 0)
    	{
    		printf("B\n");
    	}
    	else
    	{
    		printf("E\n");
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    🎨 运行截图


    🍉补充

    gets ()函数用来从标准输入设备(键盘)读取 字符串直到换行符结束。

    可以直接输入带空格的字符串

    在这里插入图片描述

    🐬 3.你是天才吗?

    代码如下
    方法一

    #include 
    int main()
    {
    	int iq = 0;
    	//EOF--end of file-文件结束标志-通常是放在文件的末尾的,键盘输入"Ctrl+Z",文件结束
    	while (scanf("%d", &iq) != EOF)//多组输入
    	{
    		if (iq >= 140)
    		{
    			printf("Genius\n");
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    方法二

    #include 
    int main()
    {
    	int iq = 0;
    	while (~scanf("%d", &iq))//多组输入
    	{
    		if (iq >= 140)
    		{
    			printf("Genius\n");
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🍉补充


    ~ 是C语言中的一个操作符,即 按 位 取 反 \color{Red}按位取反


    EOF其值其实为 − 1 -1 1

    源码变为反码:符号位不变,其他位取反

    反码进1变为补码


    在内存中,整数是以 补 码 \color{Red}补码 形式进行存储的

    所以,~ E O F EOF EOF 是对 − 1 -1 1 的补码形式进行 按 位 取 反 \color{Red}按位取反 ,即~ E O F EOF EOF的值为 0 0 0

    在这里插入图片描述

    每日进步一点点

    OK 各位
    这就是本期博客的全部内容啦,非常感谢你能看到这里

    如果你觉得这篇文章写的 还不错的话,求赞,求收藏,求转发,最重要的是点一个大大的关注,各位的支持,是我最大的动力

    在这里插入图片描述

    每个优秀的人背后都有一段沉默的时光,那是付出很多努力却不一定有结果的日子。我们把它叫扎根。

    点击链接访问牛客网

    勇敢牛牛,不怕困难!

  • 相关阅读:
    【Vue3.0 实现一个 Modal】
    软件工程(上)
    早安问候语早安心语,别把人生想太难,人生需要鼓励
    DDD 架构分层,MQ消息要放到那一层处理?
    JDK8新特性之 stream流
    el-input无法输入的问题和表单验证失败问题(亲测有效)-开发bug总结4
    seaborn笔记:可视化统计关系(散点图、折线图)
    Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
    下载离线地图地形数据库(3D离线地图开发)
    图像处理:推导三种边缘检测算法(Sobel,FFT,FHT)
  • 原文地址:https://blog.csdn.net/weixin_60777483/article/details/125750293