牛客网输入输出练习c++ 个人版题解
https://ac.nowcoder.com/acm/contest/5657#question或https://www.nowcoder.com/test/27976983/summary链接:https://ac.nowcoder.com/acm/contest/5657/A来源:牛客网数据范围: 数据组数1≤t≤1001\le t\le 1001≤t≤100 , 数据大小满足1≤n≤100
目录
原题链接
https://ac.nowcoder.com/acm/contest/5657#question
或
https://www.nowcoder.com/test/27976983/summary
1.计算 a + b a+b a+b,任意组数据任意结尾
链接:https://ac.nowcoder.com/acm/contest/5657/A
来源:牛客网
数据范围: 数据组数
1
≤
t
≤
100
1\le t\le 100
1≤t≤100 , 数据大小满足
1
≤
n
≤
1000
1 \le n\le 1000
1≤n≤1000
输入包括两个正整数
a
,
b
(
1
≤
a
,
b
≤
1000
)
a,b(1\le a, b \le 1000)
a,b(1≤a,b≤1000),输入数据包括多组。
输出描述:
输出
a
+
b
a+b
a+b的结果
输入样例:
1 5
10 20
输出样例:
6
30
代码:
#include<iostream>
using namespace std;
int a,b;
int main(){
while(cin>>a>>b){
cout<<a+b<<endl;
}
}
说明:while(cin>>a>>b)
可以反复输入,直到没有读取到输入结束
2.计算 a + b a+b a+b,指定组数据
链接:https://ac.nowcoder.com/acm/contest/5657/B
来源:牛客网
数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1≤t≤100 ,数据大小满足 1 ≤ a , b ≤ 1000 1 \le a,b \le 1000 1≤a,b≤1000
输入描述:
输入第一行包括一个数据组数
t
(
1
≤
t
≤
100
)
t(1 \le t \le100)
t(1≤t≤100)
接下来每行包括两个正整数
a
,
b
(
1
≤
a
,
b
≤
1000
)
a,b(1 \le a, b \le 1000)
a,b(1≤a,b≤1000)
输出描述:
输出
a
+
b
a+b
a+b的结果
输入样例:
2
1 5
10 20
输出样例:
6
30
代码:
#include<iostream>
using namespace std;
int t;
int main(){
cin>>t;
while(t--){
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}
}
3.计算 a + b a+b a+b,任意组数据以0 0结尾
链接:https://ac.nowcoder.com/acm/contest/5657/C
来源:牛客网
数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1≤t≤100, 数据大小满足 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100
输入描述:
输入包括两个正整数
a
,
b
(
1
≤
a
,
b
≤
1
0
9
)
a,b(1 \le a, b \le 10^9)
a,b(1≤a,b≤109),输入数据有多组, 如果输入为
00
0 0
00则结束输入
输出描述:
输出a+b的结果
输入样例:
1 5
10 20
0 0
输出样例:
6
30
代码:
#include<iostream>
using namespace std;
int a,b;
int main(){
while(cin>>a>>b&&a&&b){
cout<<a+b<<endl;
}
}
说明:while(cin>>a>>b&&a&&b)
在读取完
a
b
ab
ab数值后检测
a
b
ab
ab是否为0,同时为0则跳出循环
4.计算行数据和,每行数据总数已知,总行数未知但以0结尾
链接:https://ac.nowcoder.com/acm/contest/5657/D
来源:牛客网
题目描述 :
计算一系列数的和
数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1≤t≤100,每组数据中整数个数满足 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100,每组数据中的值满足 1 ≤ v a l ≤ 100 1 \le val \le 100 1≤val≤100
输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数
n
(
1
≤
n
≤
100
)
n(1 \le n \le 100)
n(1≤n≤100),
n
n
n为
0
0
0的时候结束输入。
接下来
n
n
n个正整数,即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入样例:
4 1 2 3 4
5 1 2 3 4 5
0
输出样例:
10
15
代码:
#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
using namespace std;
int t;
int main(){
while(cin>>t&&t){
int sum=0;
int num=0;
for(int i=0;i<t;i++){
cin>>num;
sum+=num;
}
cout<<sum<<endl;
}
return 0;
}
说明:while(cin>>t&&t)
判断当前读取数据是否为0,为0则跳出循环
5.计算行数据和,每行数据总数已知,总行数已知
链接:https://ac.nowcoder.com/acm/contest/5657/E
来源:牛客网
题目描述:
计算一系列数的和
数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1≤t≤100,每组数据中的整数个数满足 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100 ,每个数据大小满足 1 ≤ v a l ≤ 100 1 \le val \le 100 1≤val≤100
输入描述:
输入的第一行包括一个正整数
t
(
1
≤
t
≤
100
)
t(1 \le t \le 100)
t(1≤t≤100), 表示数据组数。
接下来
t
t
t行, 每行一组数据。
每行的第一个整数为整数的个数
n
(
1
≤
n
≤
100
)
n(1 \le n \le 100)
n(1≤n≤100)。
接下来
n
n
n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入样例:
2
4 1 2 3 4
5 1 2 3 4 5
输出样例:
10
15
代码:
#include<iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,num=0,sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>num;
sum+=num;
}
cout<<sum<<endl;
}
}
6.计算行数据和,每行数据总数已知,总行数未知且任意结尾
链接:https://ac.nowcoder.com/acm/contest/5657/F
来源:牛客网
题目描述:
计算一系列数的和
数据范围: 1 ≤ n ≤ 1000 1 \le n \le 1000 1≤n≤1000 , 所有数都满足 1 ≤ v a l ≤ 1000 1 \le val \le 1000 1≤val≤1000
输入描述:
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数
n
(
1
≤
n
≤
100
)
n(1 \le n \le 100)
n(1≤n≤100)。
接下来
n
n
n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入样例:
4 1 2 3 4
5 1 2 3 4 5
输出样例:
10
15
代码:
#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
using namespace std;
int t;
int main(){
while(cin>>t){
int sum=0;
int num=0;
for(int i=0;i<t;i++){
cin>>num;
sum+=num;
}
cout<<sum<<endl;
}
return 0;
}
说明:同样的,用while(cin>>t)
读取数据
7.计算行数据和,每行数据总数未知,总行数未知且任意结尾
链接:https://ac.nowcoder.com/acm/contest/5657/G
来源:牛客网
题目描述:
计算一系列数的和
输入描述:
输入数据有多组, 每行表示一组输入数据。
每行不定有
n
n
n个整数,空格隔开。
(
1
≤
n
≤
100
)
(1 \le n \le 100)
(1≤n≤100)。
输出描述:
每组数据输出求和的结果
输入样例:
1 2 3
4 5
0 0 0 0 0
输出样例:
6
9
0
代码:
#include<sstream>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string s;
int main(){
while(getline(cin,s)){
stringstream sstream(s);
int sum=0,num=0;
while(sstream>>num)
sum+=num;
cout<<sum<<endl;
}
}
说明:stringstream
类可以把字符串转化为输入流,然后从输入流中读取数据。getline(cin,s)
可以一次性读取自带空格的一行数据。sstream>>num
和cin>>num
类似,但是是从刚才转化出的字符串流而不是键盘/文件中读取数据。
8.字符串排序,已知字符串数量
链接:https://ac.nowcoder.com/acm/contest/5657/H
来源:牛客网
题目描述:
对输入的字符串进行排序后输出
输入描述:
输入有两行,第一行
n
n
n
第二行是
n
n
n个字符串,字符串之间用空格隔开
输出描述:
输出一行排序后的字符串,空格隔开,无结尾空格
输入样例:
5
c d a bb e
输出样例:
a bb c d e
代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> vs;
int main(){
string s;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
vs.push_back(s);
}
sort(vs.begin(),vs.end());
for(int i=0;i<n-1;i++)
cout<<vs[i]<<" ";
cout<<vs[n-1];
}
说明:用vector<string>
暂存输入的字符串
9.字符串排序,未知字符串数量,多组数据
链接:https://ac.nowcoder.com/acm/contest/5657/I
来源:牛客网
题目描述
对输入的字符串进行排序后输出
输入描述:
多个测试用例,每个测试用例一行。
每行通过空格隔开,有
n
n
n个字符,
n
<
100
n<100
n<100
输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
输入样例:
a c bb
f dddd
nowcoder
输出样例:
a bb c
dddd f
nowcoder
代码:
#include<iostream>
#include<vector>
#include<sstream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
string s;
vector<string> vs;
int main(){
while(getline(cin,s)){
stringstream sstream(s);
vs.clear();
string temps;
while(sstream>>temps)
vs.push_back(temps);
sort(vs.begin(),vs.end());
for(auto str:vs)
cout<<str<<" ";
cout<<endl;
}
}
说明:同样的,用getline(cin,s)
读取自带空格的数据,用stringstream
创建字符串流。
10.字符串排序,未知字符串数量,每个字符串以逗号分隔
链接:https://ac.nowcoder.com/acm/contest/5657/J
来源:牛客网
题目描述:
对输入的字符串进行排序后输出
输入描述:
多个测试用例,每个测试用例一行。
每行通过,
隔开,有
n
n
n个字符,
n
<
100
n<100
n<100
输出描述:
对于每组用例输出一行排序后的字符串,用’,'隔开,无结尾空格
输入样例:
a,c,bb
f,dddd
nowcoder
输出样例:
a,bb,c
dddd,f
nowcoder
代码(个人版)不是最优解
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> vs;
int main(){
string lines;
while(getline(cin,lines)){
vs.clear();
while(lines.find(',')!=string::npos){
vs.push_back(lines.substr(0,lines.find(',')));
lines=lines.substr(lines.find(',')+1);
}
vs.push_back(lines);
sort(vs.begin(),vs.end());
int n=vs.size();
cout<<vs[0];
for(int i=1;i<n;i++)
cout<<","<<vs[i];
cout<<endl;
}
}
说明:反复调用find()和substr不断找逗号,不断把字符串截短。输出时先输出第0项,之后输出逗号和当前项,防止出现行末空格和多余逗号。
代码(牛客网上最优解)
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=52627787
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
while(getline(cin, s)){
stringstream ss(s);
vector<string> v;
while(getline(ss, s, ',')) v.push_back(s);
sort(v.begin(), v.end());
for(int i=0;i<v.size()-1;++i) cout<<v[i]<<',';
cout<<v.back()<<endl;
}
return 0;
}
说明:getline(ss,s,ch)
可以从字符串流ss
中将字符串读入s
,这个字符串默认以\n
结尾,但可以通过参数指定为以ch
结尾。
11.计算 a + b a+b a+b,但有坑
链接:https://ac.nowcoder.com/acm/contest/5657/K
来源:牛客网
数据范围: 0 < a , b < 2 × 1 0 10 0 < a,b < 2 \times 10^{10} 0<a,b<2×1010
输入描述:
输入有多组测试用例,每组空格隔开两个整数
输出描述:
对于每组数据输出一行两个整数的和
输入样例
1 1
输出样例
2
代码:
#include<iostream>
using namespace std;
int main(){
long long a,b;
while(cin>>a>>b)
cout<<a+b<<endl;
}
说明:十年OI一场空,不开long long
见祖宗。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)