在线笔试C/C++攻克输入数据问题

本文介绍了在线笔试中遇到的C/C++输入数据问题,包括使用scanf、getline(cin, input)、istringstream和cin状态判断等方法。通过实例和代码示例,讲解了如何有效地处理输入数据,特别是处理未知数量的数组输入。建议通过在线IO编程练习提高处理能力。" 104573567,8095983,OpenCV-Python 图像处理:轮廓属性与形状匹配,"['计算机视觉', '图像分析', 'OpenCV-Python', '轮廓检测', '形状匹配']

前沿:

   参加了不少官方在线笔试,遇到编程题,明明有思路却被如何输入数据所阻隔。看见在线编程无数次报错,疯狂点击提交按钮却无济于事。这也太悲催了。

所以我先整理一些常见的C++输入数据的方式,以避免一次次的痛苦qaq~

正文


先看一个输入的题

链接:https://ac.nowcoder.com/acm/contest/320/G
来源:牛客网
 

输入描述:

输入数据有多组, 每行表示一组输入数据。

每行不定有n个整数,空格隔开。(1 <= n <= 100)。

输出描述:

每组数据输出求和的结果

示例1

输入

复制

1 2 3
4 5
0 0 0 0 0

输出

复制

6
9
0

//首先我们不知道有多少个数组,每一行第一个元素都是该数组的大小。所以肯定是while一直输入遇到不输入的情况再停下来。

1.好用的scanf("%d",&a)!=EOF

一直循环输入,先读第一行第一个数,再读剩下的数,输出结果。然后第二次循环读第二行第一个数,在读剩下的数

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	int n;
	int temp;
	while (scanf_s("%d", &n) != EOF)
	{
		int count = 0;
		for (int i = 0; i < n; i++)
		{
			cin >> temp;
			count += temp;
		}
		cout << count << endl;
	}
	cout << "结束" << endl;

	return 0;
}

注:这个是C中函数scanf,用的时候要加#include<stdio.h>

介绍下scanf返回的值,即输入成功的个数。

scanf("%d%d",&a,&b);若a,b都被输入进来返回2;若只有ab中一个被赋值返回1,若都没赋值返回EOF文件结束符。

那什么情况下会都赋值成功,什么情况下会只有一个,什么时候一个都么有呢?

这取决与我这个scanf读的范围。看读的范围里有几个数

那scanf读的范围是什么呢?是一个回车之前的所有东西吗,是

 

 

 

 

 

2.getline(cin, input)和istrin

gstream

#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <string>

#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <stack>
#include <map>
#include <iterator>
#include <set>
using namespace std;
int main()
{
	string input;
	istringstream iss;
	while (getline(cin, input))
	{
		iss.clear();
		iss.str(input);
		int temp = 0, res = 0;
		while (iss >> temp)
			res += temp;
		cout << res << endl;
	}

	return 0;
}

 

3.cin.get() == '\n'以回车作为结束符

比如以下,运用list

 
  1. list<int> p;

  2. int n=0;

  3. //构造链表

  4. int b;

  5. while(cin>>b)

  6. {

  7. p.push_back(b);

  8. n++;

  9. if (cin.get() == '\n')

  10. break;

  11. }

或者是利用 vector

#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <string>

#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <stack>
#include <map>
#include <iterator>
#include <set>
using namespace std;
int main()
{
	int temp;
	vector<int> a;
	while (cin>>temp)
	{
		a.push_back(temp);
		if (cin.get() == '\n')
		{
			break;
		}
	}

	return 0;
}

 

4.cin.fail() 、cin.eof()、cin自转为bool 判断用户是否不再输入

cin.fail()表示输入缓冲流的状态,当发生读到文件尾(不是只遇到回车,而是之后都不在输入)或读取失败时,会把failbit、eofbit标志置1。

cin.eof()表示遇到文件尾,eofbit置1

cin>>或cin.get返回一个istream对象,当放到需要bool条件时会自动转为bool类型,如果读取成功会转为true,如果没有成功返回false,这种更通用。while(cin.get(ch))  就可以判断是否读完了,会一个字符一个字符的读下去。

 

#include<iostream>
int main() {
    using namespace std;
    int tmp = 0;
    while(!cin.fail()) {
        int sum = 0;
        while(cin >> tmp) {
            sum += tmp;
            if(cin.get() == '\n') {
                cout << sum << endl;
                break;
            }
        }
    }
    return 0;
}

 

 

 

 

 

 

 

 

最后推荐一个牛客网在线io编程练习:https://ac.nowcoder.com/acm/contest/320#question,多多练习,勤能补拙,加油(ง •_•)ง。

 

 

内容概要:本文针对高比例清洁能源接入背景下配电网重构的关键问题,结合需求响应机制开展深入研究,以IEEE33节点标准系统为算例,采用Matlab进行建模与仿真分析。研究充分考虑风电、光伏等分布式电源出力的不确定性特征以及需求侧响应对系统运行的影响,构建了以降低网络损耗、改善电压质量、提升清洁能源消纳能力为目标的优化模型。通过引入智能优化算法求解网络中最优的开关操作策略,实现配电网拓扑结构的动态重构,并通过仿真结果验证了所提方法在增强系统灵活性、可靠性和经济性方面的有效性与优越性。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事新能源并网、智能配电网、需求响应、分布式能源管理等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于高渗透率可再生能源接入的主动配电网运行优化;②支撑需求响应机制下电网灵活性资源的协同调控研究;③为现代低碳、高效、自愈型智能配电网的规划与运行提供技术路径与决策支持。; 阅读建议:建议读者结合文中提供的Matlab代码与IEEE33节点系统参数进行实践复现,深入掌握配电网重构的数学建模方法、约束处理技巧及智能算法求解流程,同时可进一步拓展至多目标优化、不确定性建模(如鲁棒优化、分布鲁棒优化)及动态重构等前沿方向的研究。
内容概要:本文研究了基于条件风险价值(CVaR)的虚拟电厂与电动汽车集群之间的主从博弈优化调度问题,旨在应对电力系统中可再生能源出力与负荷需求的不确定性。通过构建主从博弈模型,将虚拟电厂作为领导者制定电价策略,电动汽车集群作为跟随者响应调度指令,结合CVaR方法量化不同风险偏好的决策行为,有效提升了系统在极端场景下的鲁棒性与经济性。研究采用Matlab进行模型编程与仿真,实现了对多主体互动行为的优化调度,并通过算例验证了所提出模型在降低运行成本、提高新能源消纳能力以及增强风险管控方面的优越性能。该方法为高比例可再生能源接入背景下电力系统的协调运行提供了理论支持和技术路径。; 适合人群:具备一定电力系统、优化理论及博弈论基础知识,从事能源互联网、综合能源系统、电动汽车调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于虚拟电厂参与电力市场环境下的定价与调度决策;②指导大规模电动汽车集群在不确定性条件下的有序充放电管理;③为含高比例可再生能源的电力系统提供风险规避型优化调度方案。; 阅读建议:学习者应掌握Matlab编程基础,熟悉YALMIP+CPLEX等优化工具箱的使用,结合文中模型结构与代码实现,重点理解主从博弈的建模逻辑、CVaR的风险刻画机制以及多目标优化的求解流程,建议自行复现算例以加深理解。
内容概要:本文针对2MW大功率虚拟同步发电机(VSG)的惯量与阻尼特性,开展并网逆变系统的Simulink仿真研究,系统构建了VSG的核心控制模型,深入分析其在并网过程中的动态响应特性、系统稳定性以及对电网惯性和阻尼支撑能力的作用机制。研究通过仿真手段验证了VSG有效模拟传统同步发电机机械动态特性的可行性,重点探讨了惯量、阻尼等关键控制参数对系统暂态性能和抗扰动能力的影响规律,旨在为提升高比例新能源接入背景下电力系统的频率稳定性和电压支撑能力提供有效的技术路径与仿真依据。; 适合人群:具备电力电子、电力系统分析及自动控制理论基础,从事新能源并网技术、微电网控制、虚拟同步机(VSG/VSM)等领域研究的研究生、科研人员及电力系统相关工程技术人员。; 使用场景及目标:①深入理解虚拟同步发电机模拟传统同步机转动惯量与阻尼的物理机理与数学建模方法;②掌握利用Simulink搭建VSG并网逆变器详细仿真模型的关键技术;③通过仿真分析惯量和阻尼系数对系统动态响应(如频率波动、功率振荡)的影响,实现控制器参数的优化设计;④为解决弱电网条件下新能源并网的稳定性问题提供仿真验证平台和技术参考。; 阅读建议:学习者应熟练掌握Simulink/Matlab仿真环境,建议结合文中所述的VSG控制策略与系统拓扑结构,动手复现完整的仿真模型,并通过设置不同工况(如负载突变、电网电压波动)和调整控制参数,对比观察系统响应曲线,从而深刻理解VSG的控制特性、优势及其在现代电力系统中的应用价值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值