C语言刷题(5)——“C”

各位CSDN的uu们你们好呀,今天,又到小雅兰的复习时间啦,那么,开始进入我们的正题吧


题目来源于牛客网

编程语言初学训练营_在线编程+题解_牛客题霸_牛客网


BC72 平均身高

BC74 HTTP状态码

BC75 数字三角形

BC76 公务员面试

BC77 有序序列插入一个数

BC78 筛选法求素数

BC79 图像相似度

BC80 登录验证

BC85 包含数字9的数

BC86 奇偶统计

BC87 统计成绩

BC89 密码验证

BC90 矩阵计算

BC92 逆序输出


#include <stdio.h>
int main()
{
	int i = 0;
	double score = 0.0;
	double sum = 0.0;
	for (i = 0; i < 5; i++)
	{

		scanf("%lf", &score);
		sum += score;
	}
	printf("%.2lf\n", sum / 5);
	return 0;
}

 

#include <stdio.h>
int main()
{
	int s = 0;
	while (scanf("%d", &s) != EOF)
	{
		switch (s)
		{
		case 200:
			printf("OK\n");
			break;
		case 202:
			printf("Accepted\n");
			break;
		case 400:
			printf("Bad Request\n");
			break;
		case 403:
			printf("Forbidden\n");
			break;
		case 404:
			printf("Not Found\n");
			break;
		case 500:
			printf("Internal Server Error\n");
			break;
		case 502:
			printf("Bad Gateway\n");
			break;
		}
	}
	return 0;
}

1. 多组输入

2. 状态码比较多,且为整数,所以可以考虑用switch语句。

#include <stdio.h>
int main()
{
	int n = 0;
	while (scanf("%d", &n) != EOF)
	{
		int i = 0;
		//打印的行数
		for (i = 1; i <= n; i++)
		{
			//打印一行的内容
			int j = 0;
			for (j = 1; j <= i; j++)
			{
				printf("%d ", j);
			}
			printf("\n");
		}
	}
	return 0;
}

1. 多组输入

2. 分析清楚每行打印的内容就行了

#include <stdio.h>
int main()
{
	int i = 0;
	int sum = 0;
	int min = 100;//假设最小值是100
	int max = 0;//假设最大值是0
	int score = 0;
	for (i = 0; i < 7; i++)
	{
		scanf("%d ", &score);//输入
		sum += score;//求和
		if (score > max)
			max = score;//求最大值
		if (score < min)
			min = score;//求最小值
	}
	printf("%.2f\n", (sum - min - max) / 5.0);
	return 0;
}

1. 多组输入

2. 一边输入,一边求和,一边求最大值最小值

3. 再算平均值

#include <stdio.h>
int main()
{
	int n = 0;
	int arr[50] = { 0 };
	int m = 0;//要插入的数据
	//输入数据
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	scanf("%d", &m);
	//处理
	for (i = n; i > 0; i--)
	{
		if (arr[i - 1 ] > m)
		{
			arr[i] = arr[i - 1];
		}
		else
		{
			arr[i] = m;
			break;
		}
	}
	//如果插入数字小于所有的数字
	if (i == 0)
	{
		arr[i] = m;
	}
	//打印
	for (i = 0; i < n + 1; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

1. 多组输入

2. 从往前比较并一定数字找到合适的位置,就可以插入数字了,但是如果插入的数字比所有的元素都小,那就插入到第一个位置上。

#include <stdio.h>
//方法1:筛选法
int main()
{
	int n = 0;
	while (scanf("%d", &n)!=EOF)
	{
		int arr[n + 1];//变长数组
		int i = 0;
		//初始化数组的内容为0-n
		for (i = 0; i <= n; i++)
		{
			arr[i] = i;
		}
		for (i = 2; i <= n; i++)
		{
			int j = 0;
			for (j = i + 1; j <= n; j++)
			{
				if (arr[j] % i == 0)
				{
					arr[j] = 0;
				}
				
			}
		}
		int count = 0;
		for (i = 2; i <= n; i++)
		{
			if (arr[i] != 0)
				printf("%d ", arr[i]);
			else
				count++;
		}
		printf("\n%d\n", count);
	}
	return 0;
}

 另一种方法:

#include <stdio.h>
//方法2:试除法
int main()
{
	int n = 0;
	while (scanf("%d", &n) != EOF)
	{
		int i = 0;
		int count = 0;
		for (i = 2; i <= n; i++)
		{
			//判断i是否为素数
			//i——i-1之间的数字
			int j = 0;
			for (j = 2; j < i; j++)
			{
				if (i % j == 0)
				{
					count++;
					break;
				}
			}
			if (j == i)
			{
				printf("%d ", j);
			}
		}
		printf("\n%d\n", count);
	}
	return 0;
}

封装函数:

#include <stdio.h>
//方法2:试除法
int is_prime(int n)
{
	int i = 0;
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int n = 0;
	//题目相当于打印n以内的素数
	while (scanf("%d", &n) != EOF)
	{
		int i = 0;
		int count = 0;
		for (i = 2; i <= n; i++)
		{
			if (is_prime(i) == 1)
			{
				printf("%d ", i);
			}
			else

			{
				count++;
			}
		}
		printf("\n%d\n", count);
	}
	return 0;
}

#include <stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	int a[100][100] = { 0 };
	int	b[100][100] = { 0 };
	scanf("%d %d", &m, &n);
	int i = 0;
	int j = 0;
	int count = 0.0;
	//输入数据
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &b[i][j]);
		}
	}
	//求相同元素的个数
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (a[i][j] == b[i][j])
			{
				count++;
			}
		}
	}
	//求相速度注意乘以100
	printf("%.2f\n", 100.0 * count / (m * n));
	return 0;
}

1. 输入二维数组

2. 求两个二维数组的相同元素个数

3. 求百分比要注意*100.0,小数点后保留2位

此题目要用到字符串函数,刚好,小雅兰最近才写完这些知识点

字符函数和字符串函数(上)——“C”_认真学习的小雅兰.的博客-CSDN博客 

字符函数和字符串函数(下)——“C”_认真学习的小雅兰.的博客-CSDN博客

#include <stdio.h>
#include<string.h>
int main()
{
	char name[20] = { 0 };
	char password[20] = { 0 };
	while (scanf("%s %s", name, password) != EOF)
	{
		if (strcmp(name, "admin") == 0 && strcmp(password, "admin") == 0)
		{
			printf("Login Success!\n");
		}
		else

		{
			printf("Login Fail!\n");
		}
	}
	return 0;
}

1. 多组输入

2. 两个字符串比较大小不能使用==,得使用strcmp函数,比较的是两个字符串中对应字符的ASCII码值。

#include <stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 1; i <= 2019; i++)
	{
		//判断i是否包含9
		int t = i;
		while (t)
		{
			if (t % 10 == 9)
			{
				count++;
				break;
			}
			t = t / 10;
		}
	}
	printf("%d\n", count);
	return 0;
}

 1. 要判断一个数字是否包含9就看一下这个数字的某一位是否为9即可,只要某一位为9就停下里来。

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int odd = 0;//奇数的个数
	int even = 0;//偶数的个数
	for (i = 1; i <= n; i++)
	{
		if (i % 2 == 1)
		{
			odd++;
		}
		if (i % 2 == 0)
		{
			even++;
		}
	}
	printf("%d %d\n", odd, even);
	return 0;
}

另一种写法:

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int odd = 0;//奇数的个数
	if (n % 2 == 0)
		odd = n / 2;//如果n是偶数,则奇数和偶数一样多
	else
		odd = n / 2 + 1;//如果n是奇数,则奇数比偶数多1
	printf("%d %d\n", odd, n - odd);
	return 0;
}

#include <stdio.h>
int main()
{
	int n = 0;
	double sum = 0.0;
	double avg = 0.0;
	double min = 100.0;//假设的最小值
	double max = 0.0;//假设的最大值
	double score = 0.0;
	int i = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%lf", &score);
		sum += score;
		if (score > max)
			max = score;
		if (score < min)
			min = score;
	}
	avg = sum / n;
	printf("%.2lf %.2lf %.2lf\n", max, min, avg);
	return 0;
}

 1. 输入的同时就最大值最小值和求和,然后计算想要的结果。

#include <stdio.h>
#include <string.h>
int main()
{
	char password1[100] = { 0 };
	char password2[100] = { 0 };
	scanf("%s %s", password1, password2);
	if (strcmp(password1, password2) == 0)
		printf("same\n");
	else

		printf("different\n");
	return 0;
}

1. 密码是字符串,字符串的比较函数使用strcmp函数。  

#include <stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int i = 0;
	int j = 0;
	int tmp = 0;
	int sum = 0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &tmp);
			if (tmp > 0)
				sum += tmp;
		}
	}
	printf("%d", sum);
	return 0;
}

1. 在输入的同时,将大于0的数求和。

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 9; i >= 0; i--)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

 如果这个题不仅仅是逆序输出,而是要把数组中的数据逆序存放,又如何处理呢?


好啦,小雅兰今天的内容就到这里啦,继续加油呀,最近收到了许多uu们的私信,都是在鼓励我,支持我,我不会辜负你们的期望的,坚持写博客!!!