各位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们的私信,都是在鼓励我,支持我,我不会辜负你们的期望的,坚持写博客!!!