实用指南:洛谷题解——C语言(9.17——9.19)

news/2025/10/3 19:17:42/文章来源:https://www.cnblogs.com/tlnshuju/p/19124889

实用指南:洛谷题解——C语言(9.17——9.19)

2025-10-03 19:14  tlnshuju  阅读(0)  评论(0)    收藏  举报

1.B2112 石头剪子布

我的思路:

1.考虑读取输入:先用scanf()把第一行的整数读进来,然后注意到后边三行都是字符串形式,且无论两个player怎么出,字符串总长度都不会超过50,遂设置char s1[N][50]char s2[N][50] 。作为两个二维字符数组,分别存储N次游戏中两名玩家的选择(字符串长度不超过 50)。

2.循环遍历游戏:使用for循环,遍历N行的游戏次数,并同时利用scanf()读取每次player1和player2的选择。

3.考虑判断输赢:注意到使用strcmp()函数。

strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。

其中,用if ,else if, else判断语句先考虑平局的情况,然后再根据规则分别写出所有player1赢的可能,最后else则player2赢。

4.程序退出:return 0  主函数退出。

完整代码:

int main() {int N;scanf("%d", &N);  // 读取游戏次数Nchar s1[N][50] ;  // 存储N次游戏中Player1的选择(每个选择是字符串,长度≤50)char s2[N][50] ;  // 存储N次游戏中Player2的选择for (int j = 0; j < N; j++) {  // 循环处理每次游戏scanf("%s %s", s1[j], s2[j]);  // 读取本次Player1和Player2的选择// 情况1:两人选择相同 → 平局if (strcmp(s1[j], s2[j]) == 0) {printf("Tie\n");}// 情况2:Player1胜利的三种规则else if ((strcmp(s1[j], "Rock") == 0 && strcmp(s2[j], "Scissors") == 0) ||(strcmp(s1[j], "Scissors") == 0 && strcmp(s2[j], "Paper") == 0) ||(strcmp(s1[j], "Paper") == 0 && strcmp(s2[j], "Rock") == 0)) {printf("Player1\n");}// 情况3:其余情况(Player2胜利)else {printf("Player2\n");}}return 0;  // 程序正常结束
}

2.B2094 不与最大数相同的数字之和

我的思路:

1.考虑读取输入:先用scanf()将第一行的整数N读进来,然后注意到第二行是一个数组形式,即用for循环读取N个整数到数组arr[]中,再输入arr[]。

2.寻找最大数:因为题目要求输出一个整数数列中不与最大数相同的数字之和,所以考虑通过遍历数组,mark到这个最大数。即初始化一个max在数组中等于0,运用for循环,让arr[i]中一旦大于max就把这个值赋予max,通过不断更新最大值即可找到最大值。

3.累加数字without最大数:先初始化变量sum,再次遍历整个数组,使用判断语句,如果数组里的数!=max,则累加进sum。

4.输出结果:printf("%d",sum);

5.程序退出:return 0  主函数退出。

完整代码:

#include 
int main() {int N;scanf("%d", &N);  // 步骤1:读取整数的个数Nint arr[N];for (int i = 0; i < N; i++) {scanf("%d", &arr[i]);  // 步骤1:读取N个整数到数组arr中}int max = arr[0];for (int i = 0; i < N; i++) {if (arr[i] > max) {max = arr[i];  // 步骤2:遍历数组,找到最大值max}}int sum = 0;for (int i = 0; i < N; i++) {if (arr[i] != max) {sum += arr[i];  // 步骤3:累加所有不等于max的数字}}printf("%d", sum);  // 输出最终的累加和return 0;
}

3.B2095 白细胞计数

我的思路:(错误版)

1.考虑读取输入:先用scanf()将第一n读进来,然后将后边几行用for循环读取n行到数组arr[]中,再输入arr[]。

2.找最大和最小值:因为题目要求去掉一个最小值和最大值,所以先各初始化变量min1和max1为arr[0],分别利用for循环遍历数组,一旦发现数组中比他大/小的值就赋给max/min,通过如此更新找到最大/最小值。

3.去掉最大/最小值并取平均值(错误点1)通过简单的判断语句,如果数值不等于最大/最小值,则累加数值和并计数,分别得到sum和count,接着用sum/count求出平均值。

4.求误差(错误点2)先初始化误差为0,同样遍历判断语句除去最大最小值的循环,然后使用fabs函数取绝对值,再将每次求出的绝对值进行循环遍历更新,找到最大的误差并输出。

5.程序退出:return 0  主函数退出。

我的代码:(错误版)

#include 
#include 
int main() {int n;scanf("%d", &n);float arr[320];for (int i = 0; i < n; i++) {scanf("%f", &arr[i]);}float max1 = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max1) {max1 = arr[i];}}float min1 = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < min1) {min1 = arr[i];}}float a = 0;float sum = 0;int count = 0;for (int i = 0; i < n; i++) {if (arr[i] != max1 && arr[i] != min1) {sum += arr[i];count++;}}a = sum / count;float maxd = 0;for (int i = 0; i < n; i++) {if (arr[i] != max1 && arr[i] != min1) {float d = fabs(arr[i] - a);if (d > maxd) {maxd = d;}}}printf("%.2f %.2f", a, maxd);return 0;
}

错误原因:

for (int i = 0; i < n; i++) {
        if (arr[i] != max1 && arr[i] != min1) {
            sum += arr[i];
            count++;
        }
    }

for (int i = 0; i < n; i++) {
        if (arr[i] != max1 && arr[i] != min1) {
            float d = fabs(arr[i] - a);
            if (d > maxd) {
                maxd = d;
            }
        }
    }

以上两块的除去最大最小值存在漏洞,即当数组中存在多个相同的最大值多个相同的最小值时,会错误地排除所有等于最大值 / 最小值的元素,而实际需求应该是仅排除一个最大值和一个最小值(无论其重复次数)。

修改方案:

  1. 计算总和:先求出所有元素的总totalsum,避免遍历筛选时误删多个极值。
  2. 仅排除一个最大值和一个最小值:通过 总和 - 最大值 - 最小值 得到有效总和,有效个数为 n - 2(当n>=2)
  3. 计算误差时跳过一个极值:遍历数组时,仅跳过一个最大值和一个最小值,其余元素参与误差计算。(增加初始化标记skipmax/skipmin=0,循环如果找到过一个最大值/最小值则变成1,使其跳过这个元素,continue循环,通过其0/1的mark避免排除多个极值)。

修改后代码:

#include 
#include 
int main() {int n;scanf("%d", &n);float totalsum = 0;float arr[320];for (int i = 0; i < n; i++) {scanf("%f", &arr[i]);totalsum += arr[i];}float max1 = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max1) {max1 = arr[i];}}float min1 = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < min1) {min1 = arr[i];}}float sum = totalsum - max1 - min1;int count = n - 2;float a = sum / count;float maxd = 0;int skipmax = 0;// 标记是否已跳过一个max1int skipmin = 0;// 标记是否已跳过一个min1for (int i = 0; i < n; i++) {// 若当前元素是max1且未跳过,则跳过并标记if (arr[i] == max1 && skipmax == 0) {skipmax = 1;continue;}// 若当前元素是min1且未跳过,则跳过并标记if (arr[i] == min1 && skipmin == 0) {skipmin = 1;continue;}float d = fabs(arr[i] - a);if (d > maxd) {maxd = d;}}printf("%.2f %.2f", a, maxd);return 0;
}

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样保证网站的安全性网站建设没业务

再谈编译链接 C函数重载与编译链接-CSDN博客 之前我已经写过文章简单介绍了编译链接要做的一些操作。现在为了能更好的理解我们平时的开发环境&#xff0c;我会在Linux系统上完整地走一遍流程。 环境描述 我们使用普通用户在Linux上进行操作&#xff0c;先写一段测试代码。 …

多模态大语言模型OISA - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

微信公众号的网站品牌推广策略有哪几种

几个星期前几个月前&#xff0c;我正在寻找如何为Oracle Cloud项目设计新的REST API。 我计划要做的事情之一就是使用Marc Hadley在Jersey 1.x中创建的声明性链接注入。 可悲的是这并没有被转发移植然而&#xff0c;这样一个快速的聊天项目带动和我承担了使代码最新的小中型工作…

电力网站怎么做随州网站建设便宜

Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum. 一、类定义 public abstract class Enum<E extends Enum<E>>implements Comparable<E>, …

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程

sk06.【scikit-learn基础】--『监督学习』之决策树 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

20251001国庆模拟

Part 1 题目列表P7075 [CSP - S2020] 儒略日 P7076 [CSP - S2020] 动物园 P7077 [CSP - S2020] 函数调用 P7078 [CSP - S2020] 贪吃蛇Part 2 考试时间线 8:02 开题, 仅仅读了 10 分钟 T1 题目,就得出结论,大模拟。 …

线段树合并 [POI 2011] ROT-Tree Rotations

波兰人太神秘了,竟能出出来如此题目。 题意 给一棵树(读入不太寻常,这个容易处理,忽略不计), 每个叶子节点有一个权值,我们可以选择交换一些节点的左右子树(保证是二叉树,且要么是叶子要么左右子树都存在)。 …

CSS的选择器 - 指南

CSS的选择器 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

ModuleNotFoundError: No module named wandb.keras

from wandb.keras import WandbCallback ModuleNotFoundError: No module named wandb.keras ================================ Successfully installed annotated-types-0.7.0 eval-type-backport-0.2.2 gitdb-4.0.1…

wordpress建站网注册公司流程和费用

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问&#xff0c;在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题&#xff0c;我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

C# Net9的模块初始化器(Module Initializer)

Module Initializer 是为了让库/框架在程序集加载时,以 “CLR 保证的、只运行一次的、不依赖类型访问的” 方式执行初始化逻辑,从而避免静态构造函数的副作用和性能问题。Module Initializer 是为了让库/框架在程序集…

离线轻量大模型,Ollama部署到docker方法

来自豆包 将Ollama部署到Docker的步骤如下: 一、安装Docker环境启用系统功能(Windows系统):打开“控制面板” → “程序与功能” → “启用或关闭Windows功能”。 勾选 Hyper-V、虚拟机平台、Linux子系统(WSL)。…

flink执行图 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:华为Pura 80芯片细节曝光,预示着华为多款新品即将震撼登场!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

应用拓扑讲义整理 Chapter 6. 单纯复形(Simplicial Complexes)

Chapter 6. 单纯复形 6.1 单纯复形的基本概念 6.1.1 仿射空间 Definition 6.1(仿射空间)仿射空间是一个三元组 \((E, \overrightarrow E, +)\),其中 \(E\) 是点集,\(\overrightarrow E\) 是由自由向量或转移组成的…

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比

完整教程:华为麒麟9010、9020、9030、9040系列芯片的性能参数及其与高通芯片的对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

AQS(ReentrantLock)源码浅析

管程 — Java同步的设计思想 管程:指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。 互斥:同一时刻只允许一个线程访问共享资源; 同步:线程之间如何通信、协作。 MESA模型 在管程的发展史上,先后出…

做网站app价格多少钱网站首页布局风格

编程笔记 html5&css&js 017 HTML样式 一、HTML样式二、CSS3小结 HTML样式是用来控制网页元素外观的一组属性和值。 一、HTML样式 可以通过以下几种方式来为HTML元素添加样式&#xff1a; 内联样式&#xff1a;直接在HTML元素的style属性中添加样式。例如&#xff1a;…

完整教程:【数据结构】快速排序与归并排序的实现

完整教程:【数据结构】快速排序与归并排序的实现2025-10-03 18:42 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

05. 事件处理

一、信号与槽在 QML 中,信号与槽机制是对象间通信的一种重要方式。它允许对象在其状态改变或发生特定事件时通知其他对象,并触发相应的处理函数。信号 是对象发出的通知,表明某个事件已经发生。槽 (信号处理器)是…