华为在线训练(3)

来源:互联网 发布:网络行为管理 编辑:程序博客网 时间:2024/05/22 06:57

1、题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N11000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成去重排序的工作。

Input Param 

     n               输入随机数的个数     

 inputArray      n个随机整数组成的数组 

Return Value

     OutputArray    输出处理后的随机整数

//set容器,元素无重复,且自动排序(默认升序)#include<stdio.h>#include<set>#include<iostream>using namespace std;int main(){int i,len,data;set <int> c;set <int>::iterator si;while(cin>>len){for(i=0;i<len;i++){cin>>data;c.insert(data);}cout<<"输出为:"<<endl;for(si=c.begin();si!=c.end();si++){cout<<*si<<endl;}       // cin.ignore();c.clear();        cout<<"重新输入:"<<endl;}return 0;}

2、题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 

详细描述:
函数接口说明: public String getResult(long ulDataInput)

输入参数:long ulDataInput:输入的正整数

返回值:  String

#include<stdio.h>#include<iostream>using namespace std;//判断一个数是否为质数//质数:只能被1和本身整除bool Is_prime(int data){int i;if(data>1){if(data==2)return true;for(i=2;i<=data-1;i++){if((data%i)==0)return false;}return true;}}//求出所有质因子,也就是分解如下//如180=2*2*3*3*5int main(){int k=2;    int num;while(cin>>num){while(k<=num){if(num%k==0){cout<<k<<" ";num=num/k;}elsek++;}k=2;cout<<endl;}    return 0;}

3、题目描述

密码要求:

1.长度超过8

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

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

说明:长度超过2的子串

#include "stdio.h"#include<iostream>#include<string>#include<string.h>using namespace std;bool solve(string str);bool check_str(string s);int main(){string s;while(getline(cin,s)){if(solve(s)&&check_str(s)){cout<<"OK"<<endl;}else{cout<<"NG"<<endl;}}return 0;}bool solve(string str){int len=str.size();;int num1,num2,num3,num4;num1=num2=num3=num4=0;if(len<=8){return false;}for(int i=0;i<len;i++){if(str[i]>='a'&&str[i]<='z'){num1=1;}else if(str[i]>='A'&&str[i]<='Z'){num2=1;}else if(str[i]>='0'&&str[i]<='9'){num3=1;}elsenum4=1;}if(num1+num2+num3+num4<3){return false;}return true;}bool check_str(string input)//重点不超过长度为3的子串{string strOut;    string strInner;int subStrFlag=0;    int len = input.length();for (int i = 0; i <= len - 3; i++)    {         strOut = input.substr(i, 3);//每三个比较一次         for (int j = i + 3; (subStrFlag!=1)&&(j <= len - 3); j++)         {              strInner = input.substr(j, 3);///返回一个从指定位置开始,并具有指定长度的子字符串。  if (strOut==strInner)  //string类型的可以直接比较?              {                  subStrFlag = 1;                  break;               }           }     }if (subStrFlag==1)return false;elsereturn true;}




#include "stdio.h"#include<iostream>  //思路:按顺序将字母提取出来#include<string>    //最后按照顺序,用提取出来的顺序字母替换原来的字母#include<string.h>#include<vector>using namespace std;int main(){string str;while(getline(cin,str)){vector<char> s;for(int i=0;i<26;i++){for(int j=0;j<str.size();j++){if(str[j]-'a'==i||str[j]-'A'==i){s.push_back(str[j]);}}}   int num=0;       for(int k=0;k<str.size();k++)   {           if((str[k]>='a'&&str[k]<='z')||(str[k]>='A'&&str[k]<='Z'))           {               str[k]=s[num++];}   }   cout<<str<<endl;}return 0;}


0 0
原创粉丝点击