华为在线训练(3)

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*5
int main()
{

	int k=2;
    int num;
	while(cin>>num)
	{
		while(k<=num)
		{
			if(num%k==0)
			{
				cout<<k<<" ";
				num=num/k;
			}
			else
				k++;
		}
		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;
		}
		else
			num4=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;
	else
		return 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值