【ACM专项练习#02】输入整行字符串、输入值到vector、取输入整数的每一位
输入整行字符串
平均绩点
题目描述
每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。
输入
有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。
输出
每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。
样例输入
A B C D F
B F F C C A
D C E F
样例输出
2.00
1.83
Unknown
输入输出知识点
如果要一次性获取一行字符串作为输入,请使用getline函数+cin
#include <iostream>
#include <string>
//获取一行字符串输入
string s;//用于保存输入字符串
getline(cin, s);//用于从输入流读取一行文本
string s;
cin >> s;
//获取一个字符输入
char c;
c = cin.get();
代码
#include <iostream>
#include <string>
using namespace std;
int main(){
string inputLevel;
while(getline(cin, inputLevel)){
float sum = 0;
int count = 0;
int f = 1;
for(int i = 0; i < inputLevel.size(); ++i){
if(inputLevel[i] == 'A') {sum += 4; count++;}
else if(inputLevel[i] == 'B') {sum += 3; count++;}
else if(inputLevel[i] == 'C') {sum += 2; count++;}
else if(inputLevel[i] == 'D') {sum += 1; count++;}
else if(inputLevel[i] == 'F') {sum += 0; count++;}
else if(inputLevel[i] == ' ') continue;
else{
f = 0;
cout << "Unknown" << endl;
break;
}
}
if(f) printf("%.2f\n", sum / count);
}
return 0;
}
输入值并放入vector中
摆平积木
题目描述
小明很喜欢玩积木。一天,他把许多积木块组成了好多高度不同的堆,每一堆都是一个摞一个的形式。然而此时,他又想把这些积木堆变成高度相同的。但是他很懒,他想移动最少的积木块来实现这一目标,你能帮助他吗?

输入
输入包含多组测试样例。每组测试样例包含一个正整数n,表示小明已经堆好的积木堆的个数。
接着下一行是n个正整数,表示每一个积木堆的高度h,每块积木高度为1。其中1<=n<=50,1<=h<=100。
测试数据保证积木总数能被积木堆数整除。
当n=0时,输入结束。
输出
对于每一组数据,输出将积木堆变成相同高度需要移动的最少积木块的数量。
在每组输出结果的下面都输出一个空行。
样例输入
6
5 2 4 1 7 5
0
样例输出
5
输入输出知识点
先分析一下题目,题目要求我们把所有积木堆摆成同样高度
那我们就得将所有积木堆的高度加起来取平均值才能知道每个积木堆要摆多高
然后就是将超过平均值的积木堆减去平均值得到该积木堆需要移动的次数,小于平均值的积木堆不用管,因为我们只需要从高的积木堆取积木
那么就涉及到怎么求平均值,用之前的方法累加虽然可以,但是就没办法再去取到输入的单个数值了
所以需要使用数组来保存输入的元素
具体来说就是创建一个数组,然后在遍历这个数组的时候用cin给每个下标位置赋值
vector<int> stack(n, 0);
for(int i = 0; i < n; ++i){
cin >> stack[i];
...
}
代码
#include <iostream>
#include<vector>
using namespace std;
int main(){
int n;
while(cin >> n){
if(n == 0) break;
int sum = 0;
vector<int> stack(n, 0);
for(int i = 0; i < n; ++i){
cin >> stack[i];
sum += stack[i];
}
int average = sum / n;
int moveTimes = 0;
for(int stackHigh : stack){
if(stackHigh > average){
moveTimes += stackHigh - average;
}
}
cout << moveTimes << endl;
cout<< endl;
}
}
共同祖先
题目描述
小明发现和小宇有共同祖先!现在小明想知道小宇是他的长辈,晚辈,还是兄弟。
输入
输入包含多组测试数据。每组首先输入一个整数N(N<=10),接下来N行,每行输入两个整数a和b,表示a的父亲是b(1<=a,b<=20)。小明的编号为1,小宇的编号为2。
输入数据保证每个人只有一个父亲。
输出
对于每组输入,如果小宇是小明的晚辈,则输出“You are my younger”,如果小宇是小明的长辈,则输出“You are my elder”,如果是同辈则输出“You are my brother”。
样例输入
5
1 3
2 4
3 5
4 6
5 6
6
1 3
2 4
3 5
4 6
5 7
6 7
样例输出
You are my elder
You are my brother
代码
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n, a, b, xm, xy;
vector<int> nums(30, 0);
while(cin >> n){
while(n--){
cin >> a >> b;
nums[a] = b;
}
int xmLen = 0, xyLen = 0;
xm = nums[1];
while(xm != 0){
xm = nums[xm];
xmLen++;
}
xy = nums[2];
while(xy != 0){
xy = nums[xy];
xyLen++;
}
if (xmLen > xyLen) cout << "You are my elder" << endl;
else if (xmLen == xyLen) cout << "You are my brother" << endl;
else cout << "You are my younger" << endl;
}
}
取输入整数的每一位值
奇怪的信
题目描述
有一天, 小明收到一张奇怪的信, 信上要小明计算出给定数各个位上数字为偶数的和。
例如:5548,结果为12,等于 4 + 8 。
小明很苦恼,想请你帮忙解决这个问题。
输入
输入数据有多组。每组占一行,只有一个整整数,保证数字在32位整型范围内。
输出
对于每组输入数据,输出一行,每组数据下方有一个空行。
样例输入
415326
3262
样例输出
12
10
代码
只要别忘了通过取模的方式获取每个位上的数值的方法,这题就是好做的
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n, num;
while(cin >> n){
int res = 0;
while(n != 0){
num = n % 10;
n /= 10;
if(num % 2 == 0) res += num;
}
cout << res << endl;
cout << endl;
}
}
【ACM专项练习#02】输入整行字符串、输入值到vector、取输入整数的每一位的更多相关文章
- c++ string类使用及用string类解决整行字符串输入
下面随笔给出c++ string类使用及用string类解决整行字符串输入. string类 使用字符串类string表示字符串 string实际上是对字符数组操作的封装 string类常用的构造函数 ...
- c程序设计语言_习题1-16_自己编写getline()函数,接收整行字符串,并完整输出
Revise the main routine of the longest-line program so it will correctly print the length of arbitra ...
- 输入3行字符串/定义flag/while/字符串后要加空格符
int i = 0,j = 0; for(; i < 3; i++) { gets(a[i]); }//输入3行字符串 bool flag = true; while语句的语义是:计算表达式的值 ...
- 【PAT甲级】1077 Kuchiguse (20 分)(cin.ignore()吃掉输入n以后的回车接着用getine(cin,s[i])输入N行字符串)
题意: 输入一个正整数N(<=100),接着输入N行字符串.输出N行字符串的最长公共后缀,否则输出nai. AAAAAccepted code: #include<bits/stdc++. ...
- Java输入几行字符串
查找书籍 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书在一行中给出书名,即 ...
- C++读入整行字符串的方法
string s; getline(cin,s); cout<<s<<endl; ]; scanf("%[^\n]%*c",s); printf(" ...
- C/C++如何整行读入字符串?
在写代码的过程中,经常要一行一行的读入字符串进行处理,这里我总结了一些方法,供大家参考. 方法一:scanf()读入char[] 使用方法: ]; scanf("%[^\n]",& ...
- 输入n个字符串,找出最长最短字符串(若有个数相同的,都打印出来)
首先,要求找到最长最短字符串,我们应该用数组将其存起来,输入的个数是不固定的,我们就可以用Scanner获取要输入的个数,最终找到的个数也不固定,我们可以封装两个方法,并且返回值类型为数组. 我遇到的 ...
- 连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)
编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用到输入流碰到文件终止符的情况了,具体 ...
- c++string标准输入和getline()整行读入
1.使用标准IO操作读写string对象 我们都知道,使用标准iostream操作来读写int ,double等内置类型的值,同样,我们也可以使用IO操作来读写string对象. c++ code: ...
随机推荐
- [转帖]kill 参数表
https://www.cnblogs.com/alix-1988/p/14331898.html kill命令格式:kill -Signal pidpid是进程号,可以用 ps 命令查出 signa ...
- [转帖]Python基础之函数(四)
https://www.jianshu.com/p/168e341fb81c 一.函数定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段:比如常用的print(),就是内建函数:通 ...
- 【转帖】基于官方rpm包方式安装Oracle19c
https://blog.whsir.com/post-5489.html 本文基于Centos7.x环境,通过官方提供的rpm包来安装19c 1.下载Oracle19c安装包 https://w ...
- C# AsyncLocal 是如何实现 Thread 间传值
一:背景 1. 讲故事 这个问题的由来是在.NET高级调试训练营第十期分享ThreadStatic底层玩法的时候,有朋友提出了AsyncLocal是如何实现的,虽然做了口头上的表述,但总还是会不具体, ...
- selenium使用cookie登录百度网页
1.首先我们先来了解下cookie的几种方法 get_cookies():获取所有cookie值 get_cookie(name):根据cookie的name值获取对应的value值 get_all_ ...
- How to Die ( Since 10.10 )
以后再也不要相信 sqrt 的精度!对 long long 级别的数取 sqrt 会炸精度! 对于区间差分 \([l,r]\) 的问题,一定要注意是否会出现 \(l>r\) 的情况!(\(|A| ...
- 浅浅的源码剖析grpc-go(一)
最近在学习 rpc 相关的知识,如果让我去从头设计一个 rpc,我从使用者的角度出发,究竟需要去做一下什么工作? 第一,RPC 本质上就是一个远程调用,那肯定就需要通过网络来传输数据.虽然传输协议可以 ...
- 如何将数据库中的树结构表导出EXCEL
我们常常会遇到这样的需求,将数据库中父子结构的表数据导出作为表头 我们实现的开发中就遇到这样的需求:将所有用户的权限表导出,权限作为表头 思路:sql求出每一条权限数据应该跨的行数,在代码中填充这些数 ...
- ABP .net Core 将日志打印在控制台
上效果图 来看一下操作流程: 一.分为.net Core 2.2 和 .net Core 3.0及以上 (一)..net Core 2.2 1.在 EntityFrameworkCore中安装Nuge ...
- 设计模式学习-使用go实现中介者模式
中介模式 定义 优点 缺点 适用范围 代码实现 参考 中介模式 定义 中介模式(Mediator):用一个中介对象来封装一系列的对象交互.中介者使个各对象不需要显示的相互引用,从而使其藕合松散,而且可 ...