华为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,最后一个单词的长度。

示例1

输入

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题目描述

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

输入描述:

输入一个有字母和数字以及空格组成的字符串,和一个字符。

输出描述:

输出输入字符串中含有该字符的个数。

示例1

输入

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    输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

输入描述:

输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述:

返回多行,处理后的结果

示例1

输入

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的新字符串数组

示例1

输入

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型整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1

输入

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值,以空格隔开

输出描述:

输出合并后的键值对(多行)

示例1

输入

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型整数

输出描述:

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例1

输入

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)字符的个数。

示例1

输入

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个字符串,请对n个字符串按照字典序排列。

输入描述:

输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:

数据输出n行,输出结果为按照字典序排列的字符串。
示例1

输入

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
来源:牛客网

[编程题]密码验证合格程序

密码要求:

 

 

 

1.长度超过8位

 

 

 

2.包括大小写字母.数字.其它符号,以上四种至少三种

 

 

 

3.不能有相同长度超2的子串重复

 

 

 

说明:长度超过2的子串



输入描述:

一组或多组长度超过2的子符串。每组占一行



输出描述:

如果符合要求输出:OK,否则输出NG

示例1

输入

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 }

 

posted @ 2017-08-12 20:36  杜东洲  阅读(553)  评论(0编辑  收藏  举报