您的位置:首页 > 其它

华为上机笔试 难题

2016-09-04 20:41 316 查看
</pre><pre name="code" class="cpp">#include <iostream>
#include <string>
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<<a[j]<<' ';
return 0;
}


题目描述

请解析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 <iostream>
#include <string>
using namespace std;
int main()
{
char a[1000];
char b[1000];
while(gets(a))
{
int n=0;
int m;
for(;a
!='\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&&(g<=n-m-2));g++)
{

b[g]=a[r];
r++;
}
/*if(g==n-1)
b[g]=a[0];*/
if(g<n)
b[g]=' ';
l=m-1;
}

}
for(int i=0;i<n;i++)
cout<<b[i];
cout<<endl;
}
return 0;
}

题目描述

给定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数组中的字符串代码:
附:strcpy函数详情原型声明:
头文件:
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

#include <iostream>
#include "string.h"
//#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
char a[1000][100]; //
while(cin>>n)
{

for(int i=0;i<n;i++)
cin>>(a[i]); //gets()?
for(int i=0;i<n;i++)
{
for(int j=n-1;j>=1;j--) //
{
int g,h;
for(g=0;(a[j][g])!='\0';g++);
for(h=0;(a[j-1][h])!='\0';h++);
//cout<<g<<h<<endl;
//for(int q=0;q<strlen(a[j])&&q<strlen(a[j-1]);) //?
for(int q=0;q<=g&&q<=h;)
{
/*if(a[j][q]>='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])
{
/*string temp1,temp2;
temp1=a[j-i];
temp2=a[j];
a[j]=temp1;
a[j-1]=temp2;*/
/*a[j-1]=a[j];
a[j]=temp;*/
char temp[100];
strcpy(temp,a[j-1]);
strcpy(a[j-1],a[j]);
strcpy(a[j],temp);
//cout<<a[j]<<a[j-1]<<endl;
break;
}
if(a[j][q]>a[j-1][q])
break;
else
q++;
}

}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<endl;
}
}
//system("pause");
return 0;
}

题目描述

王强今天很开心,公司发给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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: