牛客OJ练习
参考代码网址
https://www.cnblogs.com/Sunshineboy1/p/13495357.html
题1
输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入例子1:
4 1 2 3 4 5 1 2 3 4 5 0
输出例子1:
10
15
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
if (n==0)break;
int m = 0;//int sum,m=0;的意思是不给sum赋值
int sum = 0;
for(int i=0; i<n;i++){
cin>>m;
sum += m;
}
cout<<sum<<endl;
}
return 0;
}
题2
输入描述:
输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,空格隔开。(1 <= n <= 100)。
输出描述:
每组数据输出求和的结果
输入例子1:
1 2 3
4 5
0 0 0 0 0
输出例子1:
6
9
0
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int sum=n;
while(cin.get() != '\n'){//注意是反斜杠\n
cin>>n;
sum += n;
}
cout<<sum<<endl;
}
return 0;
}
\n 主要用于 cout<<“内容 \n”, 输出后自动换行。与cout<<“内容”<<endl;作用相同
\t相当于按了tab键,\r是回车(返回当前行的最前面),\n是换行
从字符串的长度:——>空字符的长度为0,空格符的长度为1
char a[] = "\0";
char b[] = " ";
cout << strlen(a) << endl; //0
cout << strlen(b) << endl; //1虽然输出于屏幕是一样的,但是他们还是有区别的:
char crr[] = "a b"; //输出是a b
char brr[] = "a\0b"; //输出是a --------->因为遇到'\0'代表结束
cout << strlen(crr) << endl;
cout << strlen(brr) << endl;题3 字符串排序,单行还告诉个数
输入描述:
输入有两行,第一行n
第二行是n个空格隔开的字符串
输出描述:
输出一行排序后的字符串,空格隔开,无结尾空格
输入例子1:
5
c d a bb e
输出例子1:
a bb c d e
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
string s;//定义一个s来存放字符
vector<string> strs;//定义一个字符串数组,一定是数组
while(cin>>s){//当有输入
strs.push_back(s);//把这个s存入字符串数组
if (cin.get() == '\n')//看下一个是不是空行,如果是就排序
{
sort(strs.begin(),strs.end());
for (int i = 0; i < strs.size()-1;i++){//注意这里是-1的输出
cout<<strs[i]<<' ';//输出带空格
}
cout<<strs[strs.size() - 1]<<endl;//最后输出最后一个值,因为最后一个最后不用带空格
strs.clear();//清空字符串
}
}
return 0;
}链接:https://ac.nowcoder.com/acm/contest/5657/I
来源:牛客网
字符串案例2 对于多行字符串
输入描述:
多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符,n<100
输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
示例1
输入
复制
a c bb
f dddd
nowcoder
输出
复制
a bb c
dddd f
nowcoder
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
string s;
vector<string> str;
while(cin>>s){
str.push_back(s);
if (cin.get() == '\n'){
sort(str.begin(),str.end());
for (int i = 0; i<(str.size()-1);i++){
cout<<str[i]<<' ';
}
cout<<str[str.size()-1]<<endl;
str.clear();
}
}
return 0;
}当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。
所以只能读取mark不能读取mark twin,这时候就要用到getline函数
此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。
getline 函数如下所示:
getline(cin, inputLine);
其中 cin 是正在读取的输入流,而 inputLine 是接收输入字符串的 string 变量的名称。
getline(cin,s,'\n')//遇到换行符的时候停止
链接:https://ac.nowcoder.com/acm/contest/5657/J
来源:牛客网
字符串3(对于整行的字符串的拆解)
题目描述
对输入的字符串进行排序后输出
打开以下链接可以查看正确的代码
https://ac.nowcoder.com/acm/contest/5657#question
输入描述:
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100
输出描述:
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格
示例1
输入
复制
a,c,bb
f,dddd
nowcoder
输出
复制
a,bb,c
dddd,f
nowcoder
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
string s;
while(getline(cin,s,'\n')){//首先获取整行的字符输入
string temp;//一个字符串
vector<string> res;//最后返回的数组
for (int i = 0; i < s.size(); i++){//s有多少个字母
if (s[i] != ','){//如果不是,
temp.push_back(s[i]);//给temp压进去
}else{
res.push_back(temp);//遇到一个逗号,就把之前的temp压进去,完成第一个值得录入
temp.clear();
}
}
res.push_back(temp);//n-1个逗号,还差一个值,最后循环结束得temp压进去
sort(res.begin(), res.end());
for(int i = 0; i < res.size(); i++){//输出
cout<<res[i];
if (i == res.size() -1){
cout<<endl;//只有最后一个值才换行结束
}else{
cout<<',';//否则都在字符后面加个逗号
}
}
}
return 0;
}
