首页 > 其他分享 >【ACM专项练习#02】输入整行字符串、输入值到vector、取输入整数的每一位

【ACM专项练习#02】输入整行字符串、输入值到vector、取输入整数的每一位

时间:2023-08-06 09:44:21浏览次数:60  
标签:02 输出 积木 int 样例 cin 整行 输入

输入整行字符串

平均绩点

题目描述

每门课的成绩分为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中

摆平积木

题目描述

小明很喜欢玩积木。一天,他把许多积木块组成了好多高度不同的堆,每一堆都是一个摞一个的形式。然而此时,他又想把这些积木堆变成高度相同的。但是他很懒,他想移动最少的积木块来实现这一目标,你能帮助他吗?

img

输入

输入包含多组测试样例。每组测试样例包含一个正整数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;
    }
}

标签:02,输出,积木,int,样例,cin,整行,输入
From: https://www.cnblogs.com/DAYceng/p/17609101.html

相关文章

  • 2023.31 框架与架构
    框架(Framework)是指一个软件系统或应用的基本结构和组织方式。它提供了一个开发者可以构建应用程序的基础,包括预定义的组件、库、API和工具集。框架通常具有一套规范和约定,旨在帮助开发者更高效地编写代码,并提供共享的开发模式和最佳实践。框架通常具有一定的抽象程度,可以隐藏底层......
  • 2023Spring project1
    Task1:LRU-KReplacementPolicyLRU-K算法,用于在Replacer中选择该移除的page。其会选择拥有最大的backwardk-distance的page。backwardk-distance等于第k次访问的时间和当前的时间之差。LRU-K的核心思想就是将K次打包成一次,从而提高了稳定性。对于访问不到K次的page,直接认为......
  • 【比赛·总结】2023.8 学而思Z6模拟赛
    2023.8学而思Z6模拟赛考试界面:(隐藏)题解反思在本次考试中,作者惨遭爆零。警钟长鸣\(3\)分钟。作者认为,爆零的主要原因在于作者并没有遵从“遇到难题则跳过”的原则,疯狂卡在第一题上,从第\(0\)分钟一直到最后\(1\)秒,除了其中写了一个第二题的暴力,还因为读错题没得分以外,其......
  • 2023年11月高项考试又要来临了。
    软考的11月的信息系统项目管理师马军和江山的资料如下:2023年11月高项VIP汇总地址-JS 链接:https://pan.quark.cn/s/e51af70c3f652023年11月高项-MJ 链接:https://pan.quark.cn/s/b48950ace027 qq:6648448,qq群:74839752......
  • SpringMVC的搭建idea2021、tomcat8.5
    准备环境idea2021tomcat8.0资料来源,尚硅谷的视频1、新建项目      生成pom.xml文件 3、pom.xml文件添加依赖<dependencies><!--SpringMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</arti......
  • 2023-07-30~08-05第四周暑假生活
    本周每天学习一个小时hdfs,web设计hdfs和linux的操作主要用到命令窗口,大量陌生的命令操作是学习的一大难点主要学习了:hdfs的目录操作cd/usr/local/hadoop./bin/hdfsdfs-mkdir-p/user/hadoop在HDFS中创建一个“/user/hadoop”目录,“–mkdir”是创建目录的操作,“-p”表......
  • 2023年多校联训NOIP层测试4+洛谷 8 月月赛 I & RiOI Round 2
    2023年多校联训NOIP层测试4爆零了T1幸运数字\(0pts\)T2密码\(0pts\)没做到,咕了。T3小X和他的朋友们\(0pts\)没做到,咕了。T4树上询问\(0pts\)没做到,咕了。【LGR-150-Div.2】洛谷8月月赛I&RiOIRound2T1luoguP9496「RiOI-2」hacker\(100pts\)......
  • 20230805 Datawhale第一次直播笔记
    机器学习上分技巧内容解析subtask是并列的,并且取最优,那么只需要针对最优进行优化转化为回归问题是否会更加准确数据分析和特征工程是非常关键的部分数据探索性分析(EDA):数据集大小,字段类型缺失值情况特征是否冗余是否存在时间信息标签的分布训练集测试集的分布单变量/......
  • 2023广东省赛B Base Station Construction
    也许更好的阅读体验\(\mathcal{Description}\)\(n\)个点,每个点有点权,有\(m\)个区间,要选择一些点使得所有区间里都有点,求最小总点权\(n,m\le5×10^5\)\(\mathcal{Solution}\)广东省赛好水啊,感觉单挑都可以至少\(6\)题这题属于一眼题了,不知为何过的很少设\(f_i\)表示\([1,i......
  • 2023.8.4
    P4513小白逛公园求区间的最大子段和。一眼线段树题。那么我们考虑对于线段树的每个节点应该怎么维护:对于每个节点,额外设几个变量:sum,ml,mr,ms,分别表示区间和、包含左端点的最大子段和,包含右端点的最大子段和,最大子段和。我们用p1,p2来表示左儿子和右儿子。ms的维护:......