C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路
PAT没有好好读题,把这题做麻烦了,这个思路有两个测试点没有通过,因为把数据的含义弄错了呗,肯定不能全对啊,但是用错误的数据能通过这么多测试点,也是让我很吃惊。
虽然题做错了,但是想出并实现了一个有用的思路:
读取已知行数但未知每行数字个数的思路及实现
读取一个字符,如果是回车或者空格,就吞掉,并且进行该有的操作
如果是数据的一部分,就吐出来放回缓冲区,用cin正常读取
以下为主要思路代码,注意cin.putback()
的巧妙使用
while (c = getchar()) //先让c把这个字符吃掉{if (c == ' '); //如果是空格,就真的吃掉了else if (c == '\n') //如果是回车,就把总数存起来,然后把总数归零,准备读取下一行{room[i].days = curDay;curDay = 0;i++;break;}else //如果不是空格也不是回车,说明是有用数据,把这个数据放回缓冲区,然后用cin读取这个数据,(cin默认把空格或者回车作为数据结束的标志){cin.putback(c);cin >> room[i].power[curDay];curDay++;}}
全部代码
#include<iostream>
using namespace std;
class Room
{public:double power[1000] = { 0 };double days = 0;int freeDays=0;bool mayFreeRoom = false;bool freeRoom = false;
};
int main()
{double totalRoom;double minPower;double minDay;cin >> totalRoom >> minPower >> minDay;Room room[1000];int i;int curDay = 0;char c;getchar();//吸收回车//输入一行未知数字个数,但是以\n结尾的数据for (i = 0; i < totalRoom;){while (c = getchar()){if (c == ' ');else if (c == '\n'){room[i].days = curDay;curDay = 0;i++;break;}else{cin.putback(c);cin >> room[i].power[curDay];curDay++;}}}//判断int j;bool mayFree[1000] = { false };for (i = 0; i < totalRoom; i++){for (j = 1; j < room[i].days; j++){if (room[i].power[j] < minPower){room[i].freeDays++;}}if (room[i].freeDays*2 >= room[i].days)//可能空闲{if (room[i].freeDays > minDay)//空闲{room[i].freeRoom = true;}else room[i].mayFreeRoom = true;}}//计算double totalMayFree=0;double totalFree=0;for (i = 0; i < totalRoom; i++){if (room[i].mayFreeRoom == true){totalMayFree++;}if (room[i].freeRoom == true){totalFree++;}}printf("%.1f%% %.1f%%", 100*totalMayFree / totalRoom, 100*totalFree / totalRoom);cout << endl;system("pause");
}
C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路相关推荐
- 题目:输入一个8bit数,输出其中1的个数。如果只能使用1bit全加 器,最少需要几个?
题目:输入一个8bit数,输出其中1的个数.如果只能使用1bit全加器,最少需要几个? 7个1bit全加器 module number_one(input clk,input rst_n,input ...
- 题目:输入一个8bit数,输出其中1的个数,只能使用1bit全加器
一.思路 全加器(full_adder):是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器,一位全加器可以处理低位进位,并输出本位加法进位.多个一位全加器进行级联可以得到多位全加器. ...
- 输入一个8bit数,输出其中1的个数。如果只能使用1bit全加器,最少需要几个,请使用verilog进行描述?(附verilog代码)
回答:7个. 解释:全加器是full_adder,实现两个二进制相加求和的过程.其中,Ai是被加数,Bi是加数,相邻低位来的进位数是Ci-1,输出本位和是Si,向相邻高位进位数是Ci. 图1:全加器的 ...
- C语言用指针法输入12个整数,然后按每行4个数输出(刷题)
Sometimes slightly lower the head, perhaps our way of life will be more wonderful, our ability will ...
- C语言:用指针法输入12个整数,然后按每行4个数输出
C语言:用指针法输入12个整数,然后按每行4个数输出 用指针法输入12个整数,然后按每行4个数输出 输入 输入包含一行,有12个整数. 输出 按顺序,每行输出4个整数. ####测试说明 样例输入: ...
- PAT1054 求平均值 (20 分)【从非法输入字符串中获取合法输入 cin.putback()】
吐槽 题目描述的太不清晰了吧,自己写了一些测试用例,从已知中并不能看出这些输入是否合法- 我的测试用例 21 007 000.01 12. .9 -007 -000.01 -12. -.9 .9. - ...
- EditText限制输入的字符数并弹出Toast提示字数已达上限
大家对EditText这个控件并不陌生,它是一个可供我们输入文本内容的输入框.前些日子需要实现这样一个需求:限制EditText中可以输入的最大字符数为6,达到6时,用户每按一次软键盘就弹出一个Toa ...
- 输入一个十进制数,转化为二进制
1.代码如下: // test.cpp : Defines the entry point for the console application. // /* 输入一个十进制数,转化为二进制.*/ ...
- cin指定输入截止符
C++ cin用法 cin指定输入截止符 例如有时间格式12:00:13,要求提取小时,分钟和秒数. 输入 12:00:13 输出 12 00 13 /* *输入回车后,还需要手动输入EOF,即输入截 ...
最新文章
- 2019河南对口高职高专计算机,2019年河南普通高招最后一个批次 高职高专批正式投档...
- android服务的原理,Android学习笔记:IntentService
- VS 2010 和 .NET 4.0 系列之《WPF 4》篇
- Python学习笔记011_模块_标准库_第三方库的安装
- 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)
- ubuntu查看pip安装的软件路径
- asp 基础操作之增删改查
- 服务器硬盘和台式机有什么区别,服务器和电脑主机有什么区别?
- Sock学习1 (网络基本知识、Sock简介)
- 23位子网掩码是多少_子网掩码23位的是多少
- 活性染料(反应染料)
- 带宽、线速、吞吐量概念
- 《个人金融信息保护技术规范》JRT 0171-2020专家解读(转自中国存储网)
- 一步步自定义视频播放器——TextureView+MediaPlayer自定义视频播放器
- -eq、-ne、-gt、-ge、-lt、-le英文意思
- python barrier_Python中的Barrier对象
- [Java反序列化]CommonsCollections3利用链学习
- 函数式编程实例WordCount(林子雨老师慕课代码) 由于文件引入的问题之前报过Exception in thread “main“ java.lang.NullPointerExcept(已解决)
- 起名如何计算五行与笔划
- shell脚本练习2023年下岗版
热门文章
- rss C语言,Android内存:VSS/RSS/PSS/USS介绍
- mysql免安装数据库用法_MySQL数据库之mysql免安装制作使用说明
- datagrid出现相同两组数据_多数据库联用挖掘肝细胞癌症的血管侵犯特征基因
- 二分查找(c语言实现)
- masm中常用的伪指令
- 关于寻路算法的一些思考(3):A*算法的实现
- selenium的使用教程2
- Netty学习笔记(三)EventLoopGroup开篇
- “新型肺炎患者同乘查询系统”上线,超2千万用户使用
- (RabbitMQ) Java Client API Guide