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

简介: C语言刷题(5)——“C”

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


题目来源于牛客网


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


BC72 平均身高


BC74 HTTP状态码


BC75 数字三角形


BC76 公务员面试


BC77 有序序列插入一个数


BC78 筛选法求素数


BC79 图像相似度


BC80 登录验证


BC85 包含数字9的数


BC86 奇偶统计


BC87 统计成绩


BC89 密码验证


BC90 矩阵计算


BC92 逆序输出

38a56354b5eb4eaeb0aee9c7580e27fe.png

#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;
}

0a5c33cf75d8441a8b9aee0945a9132e.png

#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语句。

22b278d2fd5c47e5a76949678e770744.png

#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. 分析清楚每行打印的内容就行了

91982a3d1ff7438682c084bb97dd95aa.png

#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. 再算平均值

deec66ffd6ac4aa592128652d7e9b663.png

c10a7a5cc9b74622a25f7858f9660d66.png

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

860938f613484668bb612a1b50d1fc05.png

#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;
}

4257baf64d5440f7977f3a51da374c6a.png

#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位

05a6d61fe95b4b8c9368ddd10b291687.png

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

字符函数和字符串函数(上)——“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码值。

1a3fcbe6a37d4e209c2d34e89541361c.png

#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就停下里来。

aabb9b0c23d94694994cfe32372b510d.png

#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;
}

75389b57626a4a5995f8b3f521668073.png

#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. 输入的同时就最大值最小值和求和,然后计算想要的结果。

6bf5ce942d8442e1a39caca120f4ad48.png

#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函数。  

1b2be72fd2ee41aa9c90b5103b9b93bf.png

#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的数求和。

82e42ed5c64546208784a64c61633666.png

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

454e2fd28bdb48e4be84f7f3c476b8c8.jpg

相关文章
|
7月前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
5月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
7月前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
7月前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
7月前
|
C语言
【C语言刷题系列】喝汽水问题
【C语言刷题系列】喝汽水问题
|
3月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
21 0
|
5月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
5月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
5月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
7月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)