牛客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; }