在线作答编程:输入输出测试,进行了总结。

 

问题描述:

在线作答编程——输入输出测试_数据

在线作答编程,需要自己处理输入输出,建议你进行在线oj输入输出练习——​​https://ac.nowcoder.com/acm/contest/5649?from=hr_test#question​

 

题目1:计算a+b
输入描述:
    输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。
输出描述:
    输出a+b的结果
示例1
输入:
1 5
10 20
输出:
6
30

答案一:



#include<iostream>

using namespace std;

int main(){
int a,b;

while(cin>>a>>b){
cout<<a+b<<endl;
}
}



答案二:



#include<iostream>

using namespace std;

int main(){
int a, b;
while (scanf("%d %d", &a, &b) != EOF){
printf("%d\n", a+b);
}
return 0;
}



答案三:



#include<iostream>
#include<vector>
using namespace std;

int main()
{
int a,b;
vector<int>v;
while(cin>>a>>b)
{
int c=a+b;
v.push_back(c);
}
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
return 0;
}



题目2:计算a+b
输入描述:
    输入第一行包括一个数据组数t(1 <= t <= 100)
    接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
输出描述:
    输出a+b的结果
示例1
2
1 5
10 20
输出
6
30

答案一:


#include<iostream>
using namespace std;

int main(){
int t;
cin >> t;
int x,y;
for(int i = 0;i < t;i++){
cin >> x >> y;
cout << x + y << endl;
}

return 0;
}



答案二:



#include<iostream>
#include<vector>
using namespace std;

int main()
{
int a,b,N;
vector<int>v;
cin>>N;
while(N--)
{
cin>>a>>b;
int c=a+b;
v.push_back(c);
}
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
return 0;
}



题目3:计算a+b
输入描述:
    输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
输出描述:
    输出a+b的结果
示例1
输入
1 5
10 20
0 0
输出
6
30

答案一:



#include <iostream>

using namespace std;

int main(){
int a,b;
while(cin >> a >> b){
if(a == 0|| b == 0)
break;
cout << a + b << endl;

}
return 0;
}



答案二:



#include<iostream>
#include<vector>
using namespace std;

int main()
{
int a,b;
vector<int>v;
while(cin>>a>>b)
{
int c=a+b;
if(c==0)
{
break;
}
else
v.push_back(c);

}
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
return 0;
}



题目4:计算一系列数的和
输入描述:
    输入数据包括多组。
    每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
    接下来n个正整数,即需要求和的每个正整数。
输出描述:
    每组数据输出求和的结果
示例1
输入
4 1 2 3 4
5 1 2 3 4 5
0
输出
10
15

答案一:



#include <iostream>

using namespace std;

int main(){
int n;
while(cin >> n){
if(n == 0) break;
int m,sum = 0;
for(int i=0;i<n;i++){
cin >> m;
sum += m;
}
cout << sum << endl;
}
return 0;
}



答案二:



#include<iostream>
#include<vector>
using namespace std;

int main()
{
int N,n;
vector<int>v;
int num=0;
while(cin>>N)
{
if(N==0)
{
break;
}
while(N--)
{
cin>>n;
num+=n;
}
v.push_back(num);
num=0;
}
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
return 0;
}



题目5:计算一系列数的和
输入描述:
    输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
    接下来t行, 每行一组数据。
    每行的第一个整数为整数的个数n(1 <= n <= 100)。
    接下来n个正整数, 即需要求和的每个正整数。
输出描述:
    每组数据输出求和的结果
示例1
输入
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;
for(int i=0; i<t; i++){
int n;
int sum=0;
cin>>n;
for(int j=0; j<n; j++){
int a;
cin>>a;
sum+=a;
}
cout<<sum<<endl;
}
return 0;
}


答案二:



#include<iostream>
#include<vector>
using namespace std;

int main()
{
int T,N,n;
vector<int>v;
cin>>T;
while(T--)
{
while(cin>>N)
{
int num=0;
while(N--)
{
cin>>n;
num+=n;
}
v.push_back(num);
num=0;
}
}
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
return 0;
}



题目6:计算一系列数的和
输入描述:
    输入数据有多组, 每行表示一组输入数据。
    每行的第一个整数为整数的个数n(1 <= n <= 100)。
    接下来n个正整数, 即需要求和的每个正整数。
输出描述:
    每组数据输出求和的结果
示例1
输入
4 1 2 3 4
5 1 2 3 4 5
输出
10
15

答案一:



#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n){
int sum=0;
for(int i=0; i<n; i++){
int a;
cin>>a;
sum+=a;
}
cout<<sum<<endl;
}
return 0;
}


答案二:



#include<iostream>
#include<vector>
using namespace std;

int main()
{
int N,n;
vector<int>v;
while(cin>>N)
{
int num=0;
while(N--)
{
cin>>n;
num+=n;
}
v.push_back(num);
num=0;
}

for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
return 0;
}



题目7:计算一系列数的和
输入描述:
    输入数据有多组, 每行表示一组输入数据。
    每行不定有n个整数,空格隔开。(1 <= n <= 100)。
输出描述:
    每组数据输出求和的结果
示例1
输入
1 2 3
4 5
0 0 0 0 0
输出
6
9
0

答案一:



cin.get()==
'\n'



答案二:



cin.get()==
'\n'



答案三:



#include <iostream>
#include <vector>
using namespace std;

int main()
{
int a;
int sum = 0;
vector<int> result;
while(cin >> a)
{
sum += a;
if(cin.get() == '\n')
{
result.push_back(sum);
sum = 0;
}
}
for(vector<int>::iterator it = result.begin(); it != result.end(); it++)
cout << *it << endl;
return 0;
}


题目8:对输入的字符串进行排序后输出
输入描述:
    输入有两行,第一行n
    第二行是n个空格隔开的字符串
输出描述:
    输出一行排序后的字符串,空格隔开,无结尾空格
示例1
输入
5
c d a bb e
输出
a bb c d e

答案一:



#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
int T;
string s;
cin>>T;
vector<string>v;
while(T--)
{
cin>>s;
v.push_back(s);
}
sort(v.begin(),v.end());
for(int i=0;i<v.size()-1;i++)
{
cout<<v[i]<<" ";
}
cout<<v[v.size()-1]<<endl;
return 0;
}



答案二:



#include <iostream>
#include <cstring>
#include <string>

using namespace std;

void sort(string str[], int n){
for(int i = 0; i < n-1; i++){
for (int j = i+1; j<n; j++){
if (str[i] > str[j]){
string temp = str[j];
str[j] = str[i];
str[i] = temp;
}
}
}
}

void print(string str[], int n){
for (int i = 0; i< n-1;i++){
cout << str[i] << ' ';
}
cout << str[n-1] << endl;
}

int main(){
int n;
while(cin >> n){
string str[n];
for(int i = 0; i<n;i++){
cin >> str[i];
}
sort(str,n);
print(str,n);
}


return 0;
}



题目9:对输入的字符串进行排序后输出
输入描述:
    多个测试用例,每个测试用例一行。
    每行通过空格隔开,有n个字符,n<100
输出描述:
    对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
示例1
输入
a c bb
f dddd
nowcoder
输出
a bb c
dddd f
nowcoder

答案一:



#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str;
vector<string> strVec;
while(cin>>str){
strVec.push_back(str);
if(cin.get()=='\n'){
sort(strVec.begin(), strVec.end());
for(int i=0; i<strVec.size()-1; i++){
cout<<strVec[i]<<" ";
}
cout<<strVec[strVec.size()-1]<<endl;
strVec.clear();
}
}

return 0;
}



答案二:



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

using namespace std;

int main()
{
vector<string> strs;
string str;
while (cin >> str) {
strs.clear();
while (true) {
strs.push_back(str);
if (cin.get() == '\n')
break;
cin >> str;
}
sort(strs.begin(), strs.end());
for (auto it = strs.begin(); it != strs.end(); it++)
cout << *it << ' ';
cout << endl;
}
return 0;
}


题目10:对输入的字符串进行排序后输出
输入描述:
    多个测试用例,每个测试用例一行。
    每行通过,隔开,有n个字符,n<100
输出描述:
    对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格
示例1
输入
a,c,bb
f,dddd
nowcoder
输出
a,bb,c
dddd,f
nowcoder

答案一:



#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;

int main()
{
string str;
vector<string> output;
while(cin >> str)
{
stringstream ss(str);
while(getline(ss, str, ','))
{
output.push_back(str);
}
sort(output.begin(), output.end());
for(int i = 0; i < output.size() - 1; i++)
{
cout << output[i] << ',';
}
cout << output[output.size() - 1] << endl;
output.clear();
}
}



答案二:



#include <iostream>
#include <string>
#include <set>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
string temp;
vector<string> all;
while(cin >> temp)
{
stringstream sstr;
sstr << temp;
while(getline(sstr, temp, ','))
{
all.push_back(temp);
}
sort(all.begin(), all.end());
for(unsigned int i = 0; i < all.size()-1; i++)
{
cout << all[i] << ',';
}
cout << all.back() << endl;
all.clear();
}

return 0;
}



答案三:



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

using namespace std;

int main()
{
vector<string> vs;
string tmp="",str1;
while(cin>>str1){
for(int i=0;i<str1.size();i++){
if(str1[i]!=','){
tmp.push_back(str1[i]);
}
else{
vs.push_back(tmp);
tmp.erase(tmp.begin(), tmp.end());
}
}
vs.push_back(tmp);//处理每行最后一个字符串(后边没有,)
tmp.erase(tmp.begin(), tmp.end());
sort(vs.begin(), vs.end());
for(int i=0;i<vs.size()-1;i++){
cout<<vs[i]<<',';
}
cout<<vs[vs.size()-1]<<endl;
vs.clear();
}
}



注意:vector头文件的push_back函数,在vector类中作用为在vector尾部加入一个数据。
string中的push_back函数,作用是字符串之后插入一个字符。
血的结论:添加字符到字符串一定用push_back函数,切不可直接用“+”。但是原因是什么,尚未搞清楚。



#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main() {
string s = "12345";
string tmpString;
tmpString += s[0] + s[1] + s[2];
stoi(tmpString);
cout << tmpString << endl;
getchar();

system("pause");
return 0;
}



运行出错!!!


问题:链接:​​https://ac.nowcoder.com/acm/contest/5649/K​



每年前几场在线笔试编程题的时候,总有同学询问为什么我本地测试通过,自测也通过,提交代码系统却返回通过率0。



这不是系统的错,可能是因为



1.你对题目理解错了,你的代码只过了样例或你自己的数据



2.你的代码逻辑有问题,你的代码只过了样例或你自己的数据



总之就是你的代码只是过了样例和自测数据,后台的测试数据你根本不可见,要多自己思考。



 



 



举例子:



输入描述:
输入有多组测试用例,每组空格隔开两个整数
输出描述:
对于每组数据输出一行两个整数的和


#include<iostream>

using namespace std;

int main()
{
int a,b;
while(cin >> a >> b)
{
cout << a+b << endl;
}
return 0;
}


 



这个题目如果你提交后通过率为0,又觉得自己代码是正确的,可以 ​​点击查看​​ 通过的代码



#include <iostream>
using namespace std;
int main() {
// 不要用 int a, b, 因为测试数据会越界,为了效果,所以这个题目故意不在题面说数据范围
// 不要用 int a, b, 因为测试数据会越界,为了效果,所以这个题目故意不在题面说数据范围
// 不要用 int a, b, 因为测试数据会越界,为了效果,所以这个题目故意不在题面说数据范围
// 不要用 int a, b, 因为测试数据会越界,为了效果,所以这个题目故意不在题面说数据范围
// 你可以试试测试用例 12141483647 12141483647,输出结果是否正确
long long a,b;
while(cin >> a >> b)// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
cout << a+b << endl;
}



 



谨记:



当你笔试的时候怀疑系统或者题目数据有问题的时候请务必先怀疑自己的代码!




 

在线作答编程:输入输出测试,进行了总结