—个完整的I邮箱地址:用户ID@邮箱服务商
比如QQ邮箱地址:123456789@qq.com
其中123456789是自己的QQ号码(帐号),@符号后的“qq.com” , 表示这是qq.com提供的邮箱,@符号表示英文单词 at ,中文解释为“在”,整个地址的含义就是 david007 在 qq.com的邮箱。
另外还有:
雅虎邮箱:用户名h@yahoo.com.cn
网易163邮箱:用户名@163.com
搜狐邮箱:用户名@sohu.com
雅虎邮箱:用户名@@yahoo.com.cn
新浪邮箱:用户名@sina.com
搜狗邮箱:用户名@ sogou.com
邮局选址问题
问题描述:
在一个按照东西和南北方向划分成规整街区的城市里,n个居民点散乱地分布在不同的街区中。用x坐标表示东西向,用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意2点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2|+|y1-y2|度量。
居民们希望在城市中选择建立邮局的最佳位置,使n个居民点到邮局的距离总和最小。
编程任务:
给定n个居民点的位置,编程计算n个居民点到邮局的距离总和的最小值。
数据输入:
由文件input.txt提供输入数据。文件的第1行是居民点数n,1≤n≤10000。接下来n行是居民点的位置,每行2个整数x和y,-10000≤x,y≤10000。
结果输出:
程序运行结束时,将计算结果输出到文件output.txt中。文件的第1行中的数是n个居民点到邮局的距离总和的最小值。
输入文件示例
5
1 2
2 2
1 3
3 -2
3 3
输出文件示例
10
解法:
//- By CQ.Xiao @ SCAU
//- Nov.9th 2007
#include "iostream"
using namespace std;
struct info{
unsigned dis; //最小值
unsigned r; //标号r之前(包括r)的村庄为一个辖区
};
//-- Definition for Global-Variable
unsigned village = 0, postoffice = 0; //number of village postoffice
unsigned *xCoordinate = NULL; //x coordinate of each village
unsigned **center = NULL, **dis = NULL; //point for Center(l,r) Dis(l,r)
info **totalDis = NULL; //point for TotalDis(t,k)
//-- Function Declare
void input();
void calculateCenter();
void calculateDis();
void calculateTotalDis();
void output(unsigned t, unsigned k);
void setFree();
int main(){
input();
calculateCenter();
calculateDis();
calculateTotalDis();
output(0, postoffice);
setFree();
return 0;
}
void input(){
//--- Input
cin village postoffice;
xCoordinate = new unsigned [village];
for (unsigned i = 0; i village; i++)
cin xCoordinate[i];
//--- Sort
int t = 0;
for (i = 0; i village - 1; i++)
for (int j = 0; j village - 1 - i; j++)
if (xCoordinate[j] xCoordinate[j+1]){
t = xCoordinate[j];
xCoordinate[j] = xCoordinate[j+1];
xCoordinate[j+1] = t;
}
}
void calculateCenter(){
//--- 内存分配
center = new unsigned *[village]; //动态分配二维数组的第一维
for (unsigned i=0; ivillage; i++) //动态分配二维数组的第二维
center[i] = new unsigned[village];
//--- 初始化Center(l,r)
for (unsigned l = 0; l village; l++)
for (unsigned r = l; r village; r++)
center[l][r] = xCoordinate[(r-l)/2 + l];
}
void calculateDis(){
//--- 内存分配
dis = new unsigned *[village]; //动态分配二维数组的第一维
for (unsigned i = 0; i village; i++) //动态分配二维数组的第二维
dis[i] = new unsigned[village];
//--- 初始化Dis(l,r)
for (unsigned l = 0; l village; l++)
for (unsigned r = l; r village; r++){
dis[l][r] = 0;
for (unsigned k = l; k = r; k++)
if (center[l][r] xCoordinate[k])
dis[l][r] += center[l][r] - xCoordinate[k]; //计算unsigned时不要得出负数
else
dis[l][r] += xCoordinate[k]- center[l][r];
}
}
void calculateTotalDis(){
//--- 内存分配
totalDis = new info *[village]; //动态分配二维数组的第一维
for (unsigned i = 0; i village; i++) //动态分配二维数组的第二维
totalDis[i] = new info[postoffice+1];
//--- 计算TotalDis(v,p+1)
//---- 当k=1时,根据公式(1.2),直接计算
for (unsigned t = 0; t village; t++)
totalDis[t][1].dis = dis[t][village-1];
//---- 当k=2,3,...,p时的情况
for (unsigned k = 2; k = postoffice; k++)
for (unsigned t = 0; t village; t++){
totalDis[t][k].dis = (unsigned)(-1);
totalDis[t][k].r = 0;
for (unsigned r = t; r = village-k; r++){
unsigned temp = dis[t][r] + totalDis[r+1][k-1].dis;
//---- 计算最小值
if (temp totalDis[t][k].dis){
totalDis[t][k].dis = temp;
totalDis[t][k].r = r;
}
}
}
}
void output(unsigned t, unsigned k){
if (1 == k)
cout center[t][village-1];
else{
cout center[t][totalDis[t][k].r] ' ';
output(totalDis[t][k].r+1, k-1);
}
}
void setFree(){
//--释放动态分配的内存
for (unsigned i = 0; i village; i++){
delete []center[i];
delete []dis[i];
delete []totalDis[i];
}
delete []center;
delete []dis;
delete []totalDis;
}
QQ邮箱地址支持QQ账号和英文开头字符账号形式,在填入QQ账号或对应的英文邮箱账号末尾添加【@qq.com】后缀即为邮箱地址。用户也可以在QQ邮箱中申请额外的Foxmail邮箱账号,在账号名末尾添加【@foxmail.com】后缀即为邮箱地址。具体介绍如下:
1、QQ邮箱地址支持QQ账号和英文开头字符账号形式,在填入QQ账号或对应的英文邮箱账号末尾添加【@qq.com】后缀即为邮箱地址。
2、用户也可以在QQ邮箱中申请额外的Foxmail邮箱账号,在账号名末尾添加【@foxmail.com】后缀即为邮箱地址。
您好,
邮箱地址可以自定义,但是您这个邮箱地址必须是有效的才行。
一般申请邮箱地址时,您在地址栏需要填入的必须是不被占用的邮箱地址,才可用。如果您提供的邮箱地址显示已被占用,那么您就得重新选址邮箱地址。
一般的邮箱地址格式是字母或者字母加数字@邮箱域名.com, 邮箱域名前的邮箱地址用户名必须选用稍微复杂一点的字母或者数字组合。
如果您有qq号,可以直接开通qq邮箱,
在您手机的浏览器里输入mail.qq.com,然后进入邮箱登录界面。
输入您的qq号码和登录密码,点击登录,之后系统会提示您还未开通邮箱,您直接按照提示点击开通就可以。
开通以后您的邮箱号码,就是您qq的数字账号@qq.com, 例如,1234@qq.com, 同时它还支持一邮多名,您还可以同时开通英文账号邮箱,foxmail,以及手机账号,这些账号其实都是同一个邮箱来管理,只是用户名称不同 ,您若想开通,需要登录邮箱设置账号 管理中去开通即可。谢谢。
望采纳。
#includestdio.h
#includestring.h
int FormatCheck(char *);
char * SplitByAt(char * ,int);
char * CharsCheck(char *);
#define N 1024
int main()
{
char str[N],*field;
memset(str,0x00,N);
scanf("%s",str);
field=SplitByAt(str,N);
if(field==NULL)
{
printf("NO\n");
return -1;
}
else if(FormatCheck(str)FormatCheck(field))
{
printf("YES\n");
return 0;
}
else
{
printf("NO\n");
return -1;
}
}
/**
*校验域名/邮箱格式
*/
int FormatCheck(char *str)
{
char *p;
for(;;)
{
p=CharsCheck(str);
if(p==str)
{
return 0;
}
else if(*p=='\0')
{
return 1;
}
else if(*p!='.')
{
return 0;
}
p++;
str=p;
}
}
/**
*校验是否可用@分割为两段,返回域名首地址,不合要求返回NULL
*参数:str,源字符串,length,长度限制(防越界)
*函数会用'\0'代替源字符串第一个'@',已完成邮箱,域名分割.
*/
char *SplitByAt(char *str,int length)
{
char *p=strchr(str,'@');
if(p!=NULL(p-str)length)
{
*p=0;
p++;
return p;
}
return NULL;
}
/**
*校验str是否为连续的'a'-'z','A'-'Z','0'-'9'字符
*返回值:第一个不合要求的字符所处位置
*例如:str="abc",返回str+3; str="a#bc",返回str+1;
*/
char * CharsCheck(char *str)
{
while((*str='a'*str='z')||
(*str='A'*str='Z')||
(*str='0'*str='9')||
*str=='_')
{
str++;
}
return str;
}
要求没有提'_'符号的特殊规则, 所以"__.__@_"这样的email也是能校验过的.
起 源
在中世纪的欧洲,要出版一本书,人们是完全用手刻出来的。由于“at”的使用频率很高,为了减轻手刻的疲劳,人们就想出了一个“at”的简写形式,即在“a”的四周画上一个圆圈,于是出现了“@”这个符号,它代表了“at”这个单词。
没 落
随着印刷技术和设备的发展,人们就不再用“@”来代替“at”了,但“@”却保留了下来。不过,这时的“@”主要用来表示商品的单价,因此,使用频率大大降低。
新 生
电脑网络的发展提出了不少新的课题,电子信箱地址如何表示就是其中的一个。1971年,美国人汤林森奉命寻找一种电子信箱地址的表示格式。考虑到许多人会使用自己的名字作为电子信箱的名称,所以汤林森选中了这个使用频率不高而且在人名中绝对不会出现的符号“@”来分隔用户名和服务器。这使得电子邮件能够通过网络准确无误地送到收件人的电子信箱里。
正是“@”在电子邮件中的使用,才使得“@”东山再起,使用频率大增。
★小松博客原创整理.转载请注明★
/--释放动态分配的内存 for (unsigned i = 0; i village; i++){ delete []center[i]; delete []dis[i]; de
eCenter();void calculateDis();void calculateTotalDis();void output(unsigned t, unsigned k);void setFree();int
lculateTotalDis(); output(0, postoffice); setFree(); return 0;}void input(){ //--- Input cin village postoffice; xCoordinat
//动态分配二维数组的第一维 for (unsigned i = 0; i village; i++) //动态分配二维数组的第二维 dis[i] = new unsigned[village]; //--- 初始化Dis(l,r) for (unsigned l = 0; l v