华为上机笔试 难题

#include 
#include 
using namespace std;
int main()
{
	string s;
	int a[7]={0};
	while(cin>>s)
	{
		int i=0;
		int b[8];
		for(int q=0;q<8;q++)
		{
			int m=0;
			for(;(s[i]!='.')&&(s[i]!='~')&&(s[i]!='\0');i++)
			{
				m++;
                s[i]=s[i]-'0';
			}
			
			//if(m==0)
				//a[5]=a[5]+1;
			if(m==1)
				b[q]=s[i-1];  //
			if(m==2)
			{
				b[q]=10*s[i-2]+s[i-1];
			}
			if(m==3)
			{
				b[q]=100*s[i-3]+10*s[i-2]+s[i-1];
			}
			//else
				//a[5]=a[5]+1;
	        i++;
		}
		if(((b[4]-b[5])!=0&&(b[4]-b[5])!=255)||((b[5]-b[6])!=0&&(b[5]-b[6])!=255)||((b[6]-b[7])!=0&&(b[6]-b[7])!=255)||b[0]>255||b[1]>255||b[2]>255||b[3]>255||b[0]<0||b[0]==127)
			a[5]=a[5]+1;
		else
		{
			if(b[0]>=1&&b[0]<=126)
				a[0]=a[0]+1;
			if(b[0]>=128&&b[0]<=191)
				a[1]=a[1]+1;
			if(b[0]>=192&&b[0]<=223)
				a[2]=a[2]+1;
			if(b[0]>=224&&b[0]<=239)
				a[3]=a[3]+1;
			if(b[0]>=240&&b[0]<=255)
				a[4]=a[4]+1;
			if(b[0]==10)
				a[6]=a[6]+1;
			if(b[0]==172&&(b[1]>=16)&&(b[1]<=31))
				a[6]=a[6]+1;
			if(b[0]==192&&(b[1]==168))
				a[6]=a[6]+1;
		}
	}
	for(int j=0;j<7;j++)
		cout<



题目描述

请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。


所有的IP地址划分为 A,B,C,D,E五类


A类地址1.0.0.0~126.255.255.255;


B类地址128.0.0.0~191.255.255.255;


C类地址192.0.0.0~223.255.255.255;


D类地址224.0.0.0~239.255.255.255;


E类地址240.0.0.0~255.255.255.255




私网IP范围是:


10.0.0.0~10.255.255.255


172.16.0.0~172.31.255.255


192.168.0.0~192.168.255.255




子网掩码为前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
本题暂时默认以0开头的IP地址是合法的,比如0.1.1.2,是合法地址



输入描述:

多行字符串。每行一个IP地址和掩码,用~隔开。

输出描述:

统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。


输入例子:
10.70.44.68~255.254.255.0
1.0.0.1~255.0.0.0
192.168.0.2~255.255.255.0
19..0.~255.255.255.0

输出例子:
1 0 1 0 0 2 1

题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符


接口说明

/**
 * 反转句子
 * 
 * @param sentence 原句子
 * @return 反转后的句子
 */
public String reverse(String sentence);

 

 

 


输入描述:

将一个英文语句以单词为单位逆序排放。

输出描述:

得到逆序的句子


输入例子:
I am a boy

输出例子:
boy a am I
#include 
#include 
using namespace std;
int main()
{
	char a[1000];
	char b[1000];
	while(gets(a))
	{
		int n=0;
		int m;
		for(;a[n]!='\0';n++);
		int l=n-1;
		for(int i=n-1;i>=0;i--)
		{
			if((a[i]==' ')||i==0)
			{
				m=i;
				if(i==0)
					m=-1;
				int g;
				int r=m+1;
				for(g=n-1-l;(g

题目描述

给定n个字符串,请对n个字符串按照字典序排列。 
输入描述:
输入第一行为一个正整数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

C语言中交换两个字符串需要借助strcpy函数或者使用自定义交换函数进行交换

如交换a,b数组中的字符串代码:

1
2
3
4
char  a[10] =  "abed" , b[10] =  "efg" , t[10];
strcpy (t, a); //a复制给t
strcpy (a, b); //b复制给a
strcpy (b, t); //t复制给b

附:strcpy函数详情

原型声明:

1
char  * strcpy ( char * dest,  const  char  *src);

头文件:

1
#include  和 #include 

功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。


#include 
#include "string.h"
//#include 
#include 
using namespace std;
int main()
{
	int n;
	char a[1000][100];  //
	while(cin>>n)
	{
		
		for(int i=0;i>(a[i]);  //gets()?
		for(int i=0;i=1;j--)  //
			{
				int g,h;
				for(g=0;(a[j][g])!='\0';g++);
				for(h=0;(a[j-1][h])!='\0';h++);
				//cout<='a')
						a[j][q]=a[j][q]-32;
					if(a[j-1][q]>='a')
						a[j-1][q]=a[j][q]-32;*/
					if(a[j][q]a[j-1][q])
						break;
					else
						q++;
				}
				
			}
		}
		for(int i=0;i

题目描述

王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

主件 附件
电脑 打印机,扫描仪
书柜 图书
书桌 台灯,文具
工作椅

如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。王强想买的东西很多,为了不超出预算,他把每件物品规定了一个重要度,分为 5 等:用整数 1  5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是 10 元的整数倍)。他希望在不超过 N 元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
    设第 j 件物品的价格为 v[j] ,重要度为 w[j] ,共选中了 k 件物品,编号依次为 j 1 , j 2 ,……, j k ,则所求的总和为:
v[j 1 ]*w[j 1 ]+v[j 2 ]*w[j 2 ]+ … +v[j k ]*w[j k ] 。(其中 * 为乘号)
    请你帮助王强设计一个满足要求的购物单。

 



输入描述:

输入的第 1 行,为两个正整数,用一个空格隔开:N m

(其中 N ( <32000 )表示总钱数, m ( <60 )为希望购买物品的个数。)

从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 3 个非负整数 v p q

(其中 v 表示该物品的价格( v<10000 ), p 表示该物品的重要度( 1  5 ), q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号)

 

输出描述:

 输出文件只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值( <200000 )。

输入例子:
1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0

输出例子:
2200

你可能感兴趣的:(校招笔试)