C语言-每日刷题练习

目录

 [传智杯 #3 决赛] 课程

题目背景

题目描述

输入格式

输出格式

输入输出样例

 [蓝桥杯 2022 省 B] 刷题统计

题目描述

输入格式

输出格式

输入输出样例

  [蓝桥杯 2021 省 AB2] 小平方

题目描述

输入格式

输出格式

输入输出样例

 [传智杯 #3 决赛] 商店

题目背景

题目描述

输入格式

输出格式

输入输出样例


 [传智杯 #3 决赛] 课程

C语言-每日刷题练习_第1张图片

题目背景

disangan233 喜欢数数,于是他想让你帮他回答一个问题。

题目描述

传智专修学院提供 A,B 两个课程,分别有 n,m 个学生报名。报名 A 的学生的编号为 an​,报名B的学生的编号为bm​,求有多少个学生同时报名了两个课程。

对于所有数据,n,m,ai​,bi​≤20,保证每个课程报名的学生编号不会重复。

输入格式

输入共 3 行。

第 1 行输入 22 个正整数 ,n,m。

第 2 行输入 n 个正整数 a1​…an​,表示报名课程 A 的学生编号。

第 3 行输入 m 个正整数 b1​…bm​,表示报名课程 B 的学生编号。

学生编号不保证从小到大排序。

输出格式

输出共 1 行 1 个整数,表示答案。

输入输出样例

输入 #1

5 5
1 2 3 4 5
1 3 4 5 6

输出 #1

4
#include 
int main()
{
	int n = 0, m = 0, arr1[20] = {0}, arr2[20] = {0}, count = 0;
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (int j = 0; j < m; j++)
	{
		scanf("%d", &arr2[j]);
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (arr1[i] == arr2[j])
			{
				count++;
			}
		}
	}
	printf("%d", count);
	return 0;
}

 [蓝桥杯 2022 省 B] 刷题统计

 C语言-每日刷题练习_第2张图片

题目描述

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

输入格式

输入一行包含三个整数 a,b 和 n.

输出格式

输出一个整数代表天数。

输入输出样例

输入 #1

10 20 99

输出 #1

8
#include
int main()
{
	long long int a = 0, b = 0, n = 0, sum = 0, count = 0;
	scanf("%lld%lld%lld", &a, &b, &n);
	while (sum < n)
	{
		for (int i = 1; i <= 5; i++)
		{
			if (sum >= n)
			{
				break;
			}
			sum += a;
			count++;
		}
		for (int i = 6; i <= 7; i++)
		{
			if (sum >= n)
			{
				break;
			}
			sum += b;
			count++;
		}
	}
	printf("%lld", count);
	return 0;
}

  [蓝桥杯 2021 省 AB2] 小平方

C语言-每日刷题练习_第3张图片

题目描述

小蓝发现,对于一个正整数 n 和一个小于 n 的正整数 v,将 v 平方后对 n 取余可能小于 n 的一半,也可能大于等于 n 的一半。

请问,在 1 到 n−1 中, 有多少个数平方后除以 n 的余数小于 n 的一半。

例如,当 n=4 时,1,2,3 的平方除以 4 的余数都小于 4 的一半。

又如,当 n=5 时, 1,4 的平方除以 5 的余数都是 1,小于 5 的一半。而 2,3 的平方除以 5 的余数都是 4, 大于等于 5 的一半。

输入格式

输入一行包含一个整数 n 。

输出格式

输出一个整数,表示满足条件的数的数量。

输入输出样例

输入 #1

5

输出 #1

2
#include
#include
int main()
{
	int n = 0, sum = 0, count = 0;
	double num = 0;
	scanf("%d", &n);
	for (int i = 1; i < n; i++) 
	{
		sum = i;
		int rs = pow(sum, 2);
		rs %= n;
		num = n / 2.0;
		if (rs < num)
		{
			count++;
		}
	}
	printf("%d", count);
	return 0;
}

 [传智杯 #3 决赛] 商店

C语言-每日刷题练习_第4张图片

题目背景

disangan333 想给 disangan233 买一个礼物,于是他和你一起逛商店。

题目描述

有 n 名同学去逛商店,店里有 m 个物品,第 i 人有 wi​ 块钱,第 i 个物品价格 ci​ 元。

每个人至多买一个物品,每个物品只能被买一次,问最多有多少人能买到物品。

对于所有数据,n,m≤10五次方,wi​,ci​≤10九次方。

输入格式

输入共 3 行。

第 1 行输入 2 个正整数 n,m。

第 2 行输入 n 个整数 w1​…wn​,wi​ 表示第 i 人的钱。

第 3 行输入 m 个整数 c1​…cm​,ci​ 表示第 i 个物品的价格。

输出格式

对于所有数据,n,m≤10五次方,wi​,ci​≤10九次方。

输入输出样例

输入 #1

15 20
4 3 9 10 7 7 5 3 6 1 8 6 6 1 5 
12 4 1 9 8 5 8 6 4 5 18 8 14 9 9 7 20 11 8 19 

输出 #1

10

 以下博主方法优点就是可以做出结果来,缺点就是时间复杂度太大。

#include
int main()
{
	int n = 0, m = 0, arr[100000] = { 0 }, str[100000] = { 0 }, temp = 0;
	int a = 0, b = 0, count = 0;//a,b就是轮到第几个人买东西,轮到卖什么东西
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int j = 0; j < m; j++)
	{
		scanf("%d", &str[j]);
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
	for (int i = 0; i < m - 1; i++)
	{
		for (int j = 0; j < m - 1 - i; j++)
		{
			if (str[j] > str[j + 1])
			{
				temp = str[j + 1];
				str[j + 1] = str[j];
				str[j] = temp;
			}
		}
	}
	//两个数组升序排序
	while (a <= n && b <= m)
	{
		if (arr[a] >= str[b]) //如果买东西的钱大于等于商品价格就进入循环
		{
			count++;          //记录购买次数
			a++;              
			b++;
		}
		else
		{
			a++;              //买不起就下一个人买
		}
	}
	printf("%d", count);
	return 0;
}

C语言-每日刷题练习_第5张图片

 小伙们每天都要记得刷题哦~

你可能感兴趣的:(算法,数据结构,c语言,开发语言,蓝桥杯)