当前位置:首页 » 《随便一记》 » 正文

✨✨✨【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(四)✨✨✨_chrisbum的博客

19 人参与  2021年12月01日 07:03  分类 : 《随便一记》  评论

点击全文阅读


C刷题(四)

    • 💚 BC23、时间转换
    • 🧡 BC24、总成绩和平均分计算
    • 💛 BC30、kiki和酸奶
    • 💙 BC31、发布会信息
    • 💜 BC32、输出学生信息
    • 🤎 BC33、计算平均成绩
    • 🖤 BC34、进制A+B
    • 💚 BC37、网购
    • 🧡 BC39、争夺前五名
    • 💛 BC40、竞选社长

🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷

🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷🐷


💚 BC23、时间转换

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
3661

输出:
1 1 1

代码:

#include <stdio.h>
int main()
{
	//输入
	int second = 0;
	scanf("%d", &second);
	int h = 0;
	int m = 0;
	int s = 0;

	//计算
	h = second / 60 / 60;
	m = second % 3600 / 60;
	s = second % 60;

	//输出
	printf("%d %d %d", h, m, s);

	return 0;
}

结果:

扩展:

在VS2019编译器下

int表示整数范围为:-231~231-1(-2147483648~2147483647)

unsighed int表示整数范围为:0~2^32-1(0~4294967295)

long表示整数范围为:-231~231-1(-2147483648~2147483647)

unsighed long表示整数范围为:0~2^32-1(0~4294967295)

long long表示整数范围为:-263~263-1(-9223372036854775808~9223372036854775807)

unsighed long long表示整数范围为:02^64-1(018446744073709551615)


🧡 BC24、总成绩和平均分计算

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
79.5 80.0 98.0

输出:
257.50 85.83

代码:

//方法一:创建3个变量
#include <stdio.h>
int main()
{
	//输入
	double chinese = 0.0;
	double math = 0.0;
	double english = 0.0;
	scanf("%lf %lf %lf", &chinese, &math, &english);

	//计算
	float sum = chinese + math + english;
	float average = sum / 3.0;

	//输出
	printf("%.2lf %.2lf\n", sum, average);

	return 0;
}

//方法二:用数组创建变量
#include <stdio.h>
int main()
{
	//输入
	double score[3] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%lf", &score[i]);
	}

	//计算
	double sum = score[0] + score[1] + score[2];
	double average = sum / 3.0;

	//输出
	printf("%.2lf %.2lf\n", sum, average);

	return 0;
}

//方法三:输入并计算
#include <stdio.h>
int main()
{
	double score = 0.0;
	double sum = 0.0;
	int i = 0;
	
	//输入并计算
	for (i = 0; i < 3; i++)
	{
		scanf("%lf", &score);
		sum += score;
	}

	//输出
	printf("%.2lf %.2lf\n", sum, sum / 3.0);

	return 0;
}

结果:

💛 BC30、kiki和酸奶

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
8 5 16

输出:
4

代码:

//单组输入
#include <stdio.h>
int main()
{
	//输入
	int n = 0;
	int h = 0;
	int m = 0;
	scanf("%d %d %d", &n, &h, &m);

	//计算和输出
	if (m % h)
	{
		printf("%d\n", n - m / h - 1);
	}
	else
	{
		printf("%d\n", n - m / h);
	}

	return 0;
}

//多组输入
#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;
}

结果:

💙 BC31、发布会信息

描述:

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

输入描述:

输出描述:

I lost my cellphone!

代码:

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

结果:

💜 BC32、输出学生信息

描述:

学生信息管理系统是学校教学管理的重要工具,现有一名学生基本信息如下:姓名-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、计算平均成绩

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
75 80 43 67 96

输出:
72.2

代码:

//方法一:利用数组输入5个成绩
#include <stdio.h>
int main()
{
	//输入
	int score[5] = { 0 };
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		scanf("%d", &score[i]);
	}

	//计算
	double average = (score[0] + score[1] + score[2] + score[3] + score[4])/5.0;
	
	//输出
	printf("%.1lf\n", average);

	return 0;
}

//方法二:输入并计算
#include <stdio.h>
int main()
{
	int score = 0;
	double sum = 0.0;
	int i = 0;
	
	//输入并计算
	for (i = 0; i < 5; i++)
	{
		scanf("%d", &score);
		sum += score;
	}

	//输出
	printf("%.1lf\n", sum / 5.0);

	return 0;
}

结果:

🖤 BC34、进制A+B

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
0x12 05

输出:
23

备注:

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

代码:

#include <stdio.h>
int main()
{
	//无论是八进制 十进制 十六进制在计算机中都是存储的是2进制
	int a = 0;
	int b = 0;
	
	//%x是十六进制的数据格式 %o是八进制的数据格式
	//0x是十六进制的前缀 0是八进制的前缀
	scanf("%x %o", &a, &b);
	int sum = a + b;
	printf("%d\n", sum);

	return 0;
}

结果:

扩展:

  • 十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式
  • %x是十六进制格式,%o就是八进制格式,%d是十进制格式
  • 0x是十六进制的前缀 0是八进制的前缀
  • 不同进制的数据存放都整形变量中都是整形值,直接计算就行,计算交给计算机


💚 BC37、网购

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
1000.0 11 11 1

输出:
650.00
    
输入:
999.8 12 12 0

输出:
799.84
    
输入:
66.6 11 11 1

输出:
0.00

代码:

//虽然可行 但是重复的代码多
#include <stdio.h>
int main()
{
	//输入
	double price = 0.0;
	double last_price = 0.0;
	int month = 0;
	int date = 0;
	int flag = 0;
	double cut = 0.0;
	scanf("%lf %d %d %d", &price, &month, &date, &flag);

	//计算
	if (month == 11 && date == 11)
	{
		cut = 0.7;
		if (flag == 1)
		{
			last_price = price * cut - 50;
		}
		else
		{
			last_price = price * cut;
		}
	}

	else if (month == 12 && date == 12)
	{
		cut = 0.8;
		if (flag == 1)
		{
			last_price = price * cut - 50;
		}
		else
		{
			last_price = price * cut;
		}
	}

	else
	{
		last_price = price;
	}

	if (last_price < 0.0)
	{
		printf("%.2lf\n", 0.0);
	}
	else
	{
		printf("%.2lf\n", last_price);
	}

	return 0;
}

//简化代码
#include <stdio.h>
int main()
{
	//输入
	double price = 0.0;
	double last_price = 0.0;
	int month = 0;
	int date = 0;
	int flag = 0;
	double cut = 1.0;
	scanf("%lf %d %d %d", &price, &month, &date, &flag);

	//计算
	if (month == 11 && date == 11)
	{
		cut = 0.7;
	}

	else if (month == 12 && date == 12)
	{
		cut = 0.8;
		
	}

	last_price = cut * price - flag * 50;

	if (last_price < 0.0)
	{
		printf("%.2lf\n", 0.0);
	}
	else
	{
		printf("%.2lf\n", last_price);
	}

	return 0;
}

结果:

🧡 BC39、争夺前五名

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
6
99 45 78 67 72 88

输出:
99 88 78 72 67 

代码:

//自己实现排序
#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]);
	}

	//排序(自己实现排序:冒泡排序)
	for (i = 0; i < n - 1; i++)
	{
		//每趟的排序
		int j = 0;
		for (j = 0; j < n - 1 - i; j++)
		{
			if (score[j] > score[j + 1])
			{
				int tmp = 0;
				tmp = score[j];
				score[j] = score[j + 1];
				score[j + 1] = tmp;
			}
		}
	}

	for (i = n - 1; i > n - 6; i--)
	{
		printf("%d ", score[i]);
	}

	return 0;
}

//利用库函数
#include <stdio.h>
#include <stdlib.h>

int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e2 - *(int*)e1;
}

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

	//计算(利用库函数)
	qsort(score, n, 4, cmp_int);

	//输出
	for (i = 0; i < 5; i++)
	{
		printf("%d ", score[i]);
	}

	return 0;
}

结果:

扩展:

  • 冒泡排序思想:

  • qsort函数:


💛 BC40、竞选社长

描述:

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

输入描述:

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

输出描述:

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

示例:

输入:
ABBABBAAB0

输出:
B

代码:

//创建2个变量计数
#include <stdio.h>
int main()
{
	//输入
	char buf[100] = { 0 };
	gets(buf);//获取一行字符串

	//统计
	int count_a = 0;
	int count_b = 0;
	int i = 0;
	while ((buf[i] != 0)&&(buf[i] != EOF))
	{
		if (buf[i] == 'A')
		{
			count_a++;
		}
		if (buf[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;
}

//创建一个变量来计数
#include <stdio.h>
int main()
{
	//输入
	char buf[100] = { 0 };
	gets(buf);//获取一行字符串

	//统计
	int flag = 0;
	int i = 0;
	while ((buf[i] != 0)&&(buf[i] != EOF))
	{
		if (buf[i] == 'A')
		{
			flag++;
		}
		if (buf[i] == 'B')
		{
			flag--;
		}
		i++;
	}

	//输出
	if (flag>0)
	{
		printf("A\n");
	}
	else if (flag<0)
	{
		printf("B\n");
	}
	else
	{
		printf("E\n");
	}

	return 0;
}

//一个一个字符读取
#include <stdio.h>
int main()
{
	//输入
	char ch = 0;
	int flag = 0;

	//统计
	while (((ch = getchar()) != 0) && (ch != EOF))
	{
		if (ch == 'A')
		{
			flag++;
		}
		if (ch == 'B')
		{
			flag--;
		}
	}

		//输出
	if (flag>0)
	{
		printf("A\n");
	}
	else if (flag<0)
	{
		printf("B\n");
	}
	else
	{
		printf("E\n");
	}

	return 0;
}

结果:

离开前,别忘了👍关注💡收藏💖
希望本文能够对大家有帮助~!


🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 往期刷题文章分享🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀

【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(一)

【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(二)

【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(三)


点击全文阅读


本文链接:http://zhangshiyu.com/post/31470.html

输入  输出  描述  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1