华为huawei oj
首先计算每个数在最大递增子串中的位置
186 186 150 200 160 130 197 200 quene
1 1 1 2 2 1 3 4 递增计数
然后计算每个数在反向最大递减子串中的位置--->计算反向后每个数在最大递增子串中的位置
200 197 130 160 200 150 186 186 反向quene
1 1 1 2 3 2 3 3 递减计数
然后将每个数的递增计数和递减计数相加
186 186 150 200 160 130 197 200 quene
1 1 1 2 2 1 3 4 递增计数
3 3 2 3 2 1 1 1 递减计数
4 4 3 5 4 2 4 5 每个数在所在队列的人数+1(自己在递增和递减中被重复计算)
如160这个数
在递增队列中有2个人数
150 160
在递减队列中有2个人数
160 130
那么160所在队列中就有3个人
150 160 130
每个数的所在队列人数表达就是这个意思
总人数 - 该数所在队列人数 = 需要出队的人数
1 链接:https://www.nowcoder.com/questionTerminal/6d9d69e3898f45169a441632b325c7b4 2 来源:牛客网 3 4 #include <iostream> 5 #include <string> 6 #include <vector> 7 #include <algorithm> 8 #include <iomanip> 9 #include <math.h> 10 using namespace std; 11 12 int main() 13 { 14 int n; 15 while (cin >> n) 16 { 17 vector<int> vec(n), dp(n), dq(n); 18 int i, k, j, ma = 0; 19 for (i = 0; i < n; ++i) 20 { 21 cin >> vec[i]; 22 dp[i] = 1; 23 dq[i] = 1; 24 } 25 for (i = 1; i < n; ++i) 26 { 27 for (j = 0; j < i; ++j) 28 { 29 if (vec[i] > vec[j]) 30 dp[i] = max(dp[i], dp[j] + 1); 31 } 32 } 33 for (i = n - 2; i >= 0; --i) 34 { 35 for (j = n - 1; j > i; --j) 36 { 37 if (vec[i] > vec[j]) 38 dq[i] = max(dq[i], dq[j] + 1); 39 } 40 } 41 for (i = 0; i < n; ++i) 42 ma = max(ma, dp[i] + dq[i] - 1); 43 cout << n - ma << endl; 44 } 45 return 0; 46 }
001题目描述
计算字符串最后一个单词的长度,单词以空格隔开。
输入描述:
一行字符串,非空,长度小于5000。
输出描述:
整数N,最后一个单词的长度。
输入
hello world
输出
5
思路::遍历一遍找到空格个数,在遍历一遍定位最后一个空格 然后总长度减去定位 就是最后一个字母的长度
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 char a[5000]; //定义一个char数组 8 gets(a); //把字符串读入字符串数组 9 int m=0,n=0,sum=0; 10 for (int i = 0; a[i]!='\0'; i++) //遍历结束的标志是 a[i]!='\0'; 11 { 12 sum++; 13 if (a[i] == ' ') 14 n++; 15 } 16 if (n == 0) 17 { 18 cout << sum ; 19 } 20 else 21 { 22 m = n; 23 for (int i = 0; a[i] != '\0'; i++) 24 { 25 if (a[i] == ' ') 26 m--; 27 if (m == 0) 28 { 29 cout << sum - i - 1; 30 break; //break 跳出for continue跳出这次 继续下一轮的循环 return 结束了 31 } 32 } 33 } 34 35 return 0; 36 }
#include<iostream> #include<string> #include<vector> using namespace std; int main(){ string input; vector<string>arr; while(cin>>input){ arr.push_back(input); } cout<<arr[arr.size()-1].length()<<endl; return 0; }
尼玛 太简单了 !!!!!!!!
002题目描述
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
输入描述:
输入一个有字母和数字以及空格组成的字符串,和一个字符。
输出描述:
输出输入字符串中含有该字符的个数。
输入
ABCDEF A
输出
1
1 #include<iostream> 2 3 #include<algorithm> 4 #include<string> 5 using namespace std; 6 7 int main() 8 { 9 string str; //字符串的输入 方法2 10 char ch; // 11 getline(cin, str); //getline(cin,str); 12 cin >> ch; 13 if (ch>='a'&&ch<='z') // count (str.begin(),str.end(),ch) ch-32 变大写 14 { 15 cout << count(str.begin(), str.end(), ch) + count(str.begin(), str.end(), ch - 32); 16 } 17 else if (ch >= 'A'&&ch <= 'Z') 18 { 19 cout << count(str.begin(), str.end(), ch) + count(str.begin(), str.end(), ch + 32); 20 } 21 else //如果是个数值的话 22 { 23 cout << count(str.begin(), str.end(), ch); 24 } 25 return 0; 26 }
003 明明的随机数 认真输入
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
Input Param
n 输入随机数的个数
inputArray n个随机整数组成的数组
Return Value
OutputArray 输出处理后的随机整数
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数
输出描述:
返回多行,处理后的结果
输入
11 10 20 40 32 67 40 20 89 300 400 15
输出
10 15 20 32 40 67 89 300 400
1 #include<iostream> 2 #include<set> 3 using namespace std; 4 5 int main() 6 7 { 8 int n,x; 9 set<int> a; 10 while (cin>>n) 11 { 12 for (int i = 0; i < n; i++) 13 { 14 cin >> x; 15 a.insert(x); 16 } 17 set<int>::iterator it = a.begin(); 18 for (; it!=a.end(); it++) 19 { 20 cout << *it << endl; 21 } 22 a.clear(); 23 } 24 25 return 0; 26 }
1 #include <iostream> 2 using namespace std; 3 int main() { 4 int N, n; 5 while (cin >> N) { 6 int a[1001] = { 0 }; 7 while (N--) { 8 cin >> n; 9 a[n] = 1; 10 } 11 for (int i = 0; i < 1001; i++) 12 if (a[i]) 13 cout << i << endl; 14 } 15 return 0; 16 }//阿西吧 空间换时间
004题目描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
输入
abc 123456789
输出
abc00000 12345678 90000000
substr(字符串,截取开始位置,截取长度) //返回截取的字
substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串
substr('Hello World',1,1) //返回结果为 'H' *0和1都是表示截取的开始位置为第一个字符
substr('Hello World',2,4) //返回结果为 'ello'
substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符
例如:
string s("What we have here is a failure to communicate"); string sub = s.substr(21);//去除前21个字符剩下的返回给sub 对s没有任何影响 cout << "The original string is " << s << endl; cout << "The substring is " << sub << endl;
显示:
The original string is What we have here is a failure to communicate The substring is a failure to communicate
1 #include<iostream> 2 #include<string> 3 //#include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 int n = 2; 9 string str; 10 while (n--) 11 { 12 getline(cin, str); 13 if (str.length()==0) 14 { 15 return 0; 16 } 17 while (str.size() > 8) 18 { 19 cout << str.substr(0, 8) << endl; 20 str = str.substr(8); 21 } 22 if (str.size() <= 8) 23 { 24 cout << str.append(8 - str.size(), '0') << endl; 25 } 26 } 27 return 0; 28 }
005 质数因子 题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
详细描述:
函数接口说明:
public String getResult(long ulDataInput)
输入参数:
long ulDataInput:输入的正整数
返回值:
String
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
输入
180
输出
2 2 3 3 5
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int long m; 7 while (cin >> m) 8 { 9 if (m <= 1) 10 return 0; 11 while (m != 1) 12 { 13 for (size_t i = 2; i <= m; i++) 14 { 15 if (m %i == 0) 16 { 17 cout << i << " "; 18 m = m / i; 19 break; 20 } 21 } 22 } 23 } 24 25 return 0; 26 }
006 map 键值对 题目描述
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
输入
4 0 1 0 2 1 2 3 4
输出
0 3 1 2 3 4
1 #include <iostream> 2 #include <map> 3 #include <utility> 4 using namespace std; 5 6 int main() 7 { 8 int n,x,y; 9 map<int, int> a; 10 cin >> n; 11 while (n--) 12 { 13 int key, value; 14 cin >> key >> value; 15 if (!a[key]) 16 { 17 a[key] = value; 18 } 19 else 20 { 21 a[key] += value; 22 } 23 24 } 25 map<int, int>::iterator it = a.begin(); 26 for (;it!=a.end(); it++) 27 { 28 cout << it->first << " " << it->second<<endl; 29 } 30 a.clear(); 31 return 0; 32 }
题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
输入
9876673
输出
37689
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int n,sum=0; 8 int sz[10] = { 0 }; 9 while (cin >> n) 10 { 11 while (n) 12 { 13 if (sz[(n % 10)] == 0) 14 { 15 sz[n % 10]=1; 16 sum = sum * 10 + n % 10; 17 18 } 19 n = n / 10; 20 } 21 cout << sum << endl; 22 } 23 24 return 0; 25 }
HW 统计字符个数 题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
输入
abc
输出
3
1 #include <iostream> 2 #include <string> 3 #include <set> 4 using namespace std; 5 int main01() 6 { 7 int n=0; 8 string str; 9 10 getline(cin, str); 11 for (int i = 0; i < 127; i++) 12 { 13 if (str.find((char)i) != string::npos) 14 { 15 n++; 16 } 17 } 18 cout << n << endl; 19 20 return 0; 21 } 22 23 int main() 24 { 25 int sum; 26 set<char> s; 27 char c; 28 while (cin >> c) 29 { 30 if (c >= 0 && c <= 127) 31 s.insert(c); 32 } 33 34 cout << s.size() << endl; 35 36 return 0; 37 }
题目描述
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
输入
9 cap to cat card two too up boat boot
输出
boat boot cap card cat to too two up
1 #include<iostream> 2 #include <string> 3 #include<vector> 4 #include<algorithm> 5 using namespace std; 6 7 int main() 8 { 9 int n; 10 while (cin>>n&&n>=1) 11 { 12 string str; 13 vector<string> v; 14 while (n--) 15 { 16 cin >> str; 17 v.push_back(str); 18 } 19 sort(v.begin(), v.end()); 20 for (vector<string>::iterator it=v.begin();it!=v.end() ; it++) 21 { 22 cout << *it << endl; 23 } 24 v.clear(); 25 } 26 return 0; 27 }
链接:https://www.nowcoder.com/questionTerminal/184edec193864f0985ad2684fbc86841
来源:牛客网
- 热度指数:36353 时间限制:1秒 空间限制:32768K
- 算法知识视频讲解
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
输入
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出
OK NG NG OK
1 链接:https://www.nowcoder.com/questionTerminal/184edec193864f0985ad2684fbc86841 2 来源:牛客网 3 4 #include <iostream> 5 #include <string> 6 using namespace std; 7 int main(){ 8 string str; 9 while(cin >> str){ 10 int flag[4] = {0}; 11 if(str.size() <= 8) goto NG; 12 for(int i = 0; i < str.size(); ++i) 13 if(str[i] >= 'a' && str[i] <= 'z') flag[0] = 1; 14 else if(str[i] >= 'A' && str[i] <= 'Z') flag[1] = 1; 15 else if(str[i] >= '0' && str[i] <= '9') flag[2] = 1; 16 else flag[3] = 1; 17 if(flag[0] + flag[1] + flag[2] + flag[3] < 3) goto NG; 18 for(int i = 0; i <= str.size()-6; i++) 19 for(int j = i+3;j < str.size();j++) 20 if(str[i] == str[j] && str[i+1] == str[j+1] &&str[i+2] == str[j+2]) goto NG; 21 OK: 22 cout << "OK" << endl;continue; 23 NG: 24 cout << "NG" << endl; 25 } 26 return 0; 27 }//我的是最短的吗?
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main(){ 5 string str; 6 while (cin >> str) 7 { 8 int flag[4] = { 0 }; 9 if (str.size() <= 8) 10 { 11 cout << "NG" << endl; 12 continue; 13 } 14 for (int i = 0; i < str.size(); ++i) 15 { 16 if (str[i] >= 'a' && str[i] <= 'z') flag[0] = 1; 17 else if (str[i] >= 'A' && str[i] <= 'Z') flag[1] = 1; 18 else if (str[i] >= '0' && str[i] <= '9') flag[2] = 1; 19 else flag[3] = 1; 20 } 21 22 if (flag[0] + flag[1] + flag[2] + flag[3] < 3) 23 { 24 cout << "NG" << endl; 25 continue; 26 } 27 int temp = 0; 28 for (int i = 0; i + 3<str.size(); ++i) 29 { 30 string s1 = str.substr(i, 3); 31 if (str.find(s1, i + 3) != -1) 32 { 33 temp = 1; 34 } 35 36 } 37 if (temp==1) 38 { 39 cout << "NG" << endl; 40 continue; 41 } 42 else 43 { 44 cout << "OK" << endl; 45 } 46 } 47 return 0; 48 }