贴别人的一些代码

日历
2006 十一月
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script language="javascript" src="http://sta.yculblog.com/uni-calendar.js" type="text/javascript"></script><script language="javascript" type="text/javascript"> var strBlogID = ""; var strDatesHasPost = ""; showCalendar(2006,11); </script>
网志分类
· 所有网志
· OpenGL
· 纹理合成
· 图形图像
· 游戏编程
· VC && C++
· 笔试面试
· 就业之路
· 曾经的msn space
· 未分类
 
 
 
 
 
<script language="Javascript" src="http://www.fifid.com/my/badge/?js&u_id=1099468&style=v1&fontsize=12&imagesize=s&encoding=GB18030&border=ffffff&name=9E7812&namebg=ffffff&caption=000000&captionbg=edc865" type="text/javascript"></script>
 
站内搜索
        
 
 
 

 

 

blues_j的学习日记

老天忘了给我翅膀,于是我用幻想飞翔……


blues_j @ 2006-10-18 17:35

本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法。
1.先序遍历非递归算法
#define maxsize 100
typedef struct
{
    Bitree Elem[maxsize];
    int top;
}SqStack;

void PreOrderUnrec(Bitree t)
{
    SqStack s;
    StackInit(s);
    p=t;
   
    while (p!=null || !StackEmpty(s))
    {
        while (p!=null)             //遍历左子树
        {
            visite(p->data);
            push(s,p);
            p=p->lchild;      
        }//endwhile
        
        if (!StackEmpty(s))         //通过下一次循环中的内嵌while实现右子树遍历
        {
            p=pop(s);
            p=p->rchild;        
        }//endif
               
    }//endwhile
   
}//PreOrderUnrec

2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
    Bitree Elem[maxsize];
    int top;
}SqStack;

void InOrderUnrec(Bitree t)
{
    SqStack s;
    StackInit(s);
    p=t;
    while (p!=null || !StackEmpty(s))
    {
        while (p!=null)             //遍历左子树
        {
            push(s,p);
            p=p->lchild;
        }//endwhile
        
        if (!StackEmpty(s))
        {
            p=pop(s);
            visite(p->data);        //访问根结点
            p=p->rchild;            //通过下一次循环实现右子树遍历
        }//endif   
   
    }//endwhile

}//InOrderUnrec


3.后序遍历非递归算法
#define maxsize 100
typedef enum{L,R} tagtype;
typedef struct
{
    Bitree ptr;
    tagtype tag;
}stacknode;

typedef struct
{
    stacknode Elem[maxsize];
    int top;
}SqStack;

void PostOrderUnrec(Bitree t)
{
    SqStack s;
    stacknode x;
    StackInit(s);
    p=t;
   
    do
    {
        while (p!=null)        //遍历左子树
        {
            x.ptr = p;
            x.tag = L;         //标记为左子树
            push(s,x);
            p=p->lchild;
        }
   
        while (!StackEmpty(s) && s.Elem[s.top].tag==R)  
        {
            x = pop(s);
            p = x.ptr;
            visite(p->data);   //tag为R,表示右子树访问完毕,故访问根结点      
        }
        
        if (!StackEmpty(s))
        {
            s.Elem[s.top].tag =R;     //遍历右子树
            p=s.Elem[s.top].ptr->rchild;        
        }   
    }while (!StackEmpty(s));
}//PostOrderUnrec


 
blues_j @ 2006-10-16 20:20

关系数据库的主要特点之一就是用表的方式组织数据。表是SQL语言存放数据、查找数据以及更新数据的基本数据结构。在SQL语言中,表有严格的定义,它是一种二维表,对于这种表有如下规定:

1)每一张表都有一个名字,通常称为表名或关系名。表名必须以字母开头,最大长度为30个字符。
2)一张表可以由若干列组成,列名唯一,列名也称作属性名。
3)表中的一行称为一个元组,它相当于一条记录。
4)同一列的数据必须具有相同的数据类型。
5)表中的每一个列值必须是不可分割的基本数据项。

 

 

CREATE TABLE 表名 [表约束]

(列名1 数据类型 [缺省值1,列约束1]

(列名2 数据类型 [缺省值2,列约束2]n 数据类型 [缺省值n,列约束n]

列名

[TABLESPACE 表空间名称]

[STORAGE (存贮的子句)]

[ENABLE 约束名]

[DISABLE 约束名]

 

 

当一个表新建成时,它里面没有数据,通过向表中扦入数据,建成表的实例。

语句句法:

INSERT INTO 表名[(列名1,)]

VALUES(1,值2,…,值n)

[子查询]

假设有一张表Student如下所示:

NONAMEAGE
1001A12
1002B14

将新学E增加到表中,并按照表的结构将信息添加完整,需要如下语句:

INSERT INTO STUDENT VALUSE(1003, 'E',12);

 

对表中已有数据进行修改,语句句法:

UPDATE 表名SET 列名1=表达式1,列名2=表达式2,…

WHERE 条件;B的年纪改为18;应该执行以下语句:

例如:对下表Student

NONAMEAGE
1001A12
1002B14

UPDATE STUDENT SET AGE=18 WHERE NAME='B';

 

删除表中已有数据,不能删除不存在的数据。

语句句法:

  • DELETE FROM 表名 WHERE 条件;

    例如:

    对下面Student表进行删除,要删除其中年纪为12的学生;

    NONAMEAGE
    1001A12
    1002B14

    DELETE FROM STUDENT WHERE AGE12

  • 表结构的修改

     

 

ALTER TABLE 表名 ADD(新列名 数据类型(长度))

    例如:

    ALTER TABLE STUDENT ADD (DEPARTMENT CHAR(8));增加已有列的数据类型。

b.

    例如:

    ALTER TABLE STUDENT MODIFY(NAME VARCHAR2(25));

 

将已经存在的表删除,语句句法:

    DROP TABLE表名;

    例如:

    DROP TABLE EMP

 

SELECT命令的语法为:

SELECT [DISTINCT|ALL] {*|模式名.] {表名|视图名||} .*| 表达式[列别名] ]

快照名] .*…| {表达式[列别名]…} } [, [模式名. ] {表名|

视图名

FROM [模式名.] {表名|视图名|快照名} [@数据库链名] [表别名]

[, [模式名.] {表名|视图名|快照名} [@数据库链名]

[表别名] ]

[WHERE条件]

[START WITH条件 CONNECT BY 条件]

[GROUP BY表达式[,表达式] [HAVING条件]

[UNION|UNION ALL |INTERSECT|MINUS]SELECT命令

[ORDER BY{表达式|位置} [ASC|DESC] [, {表达式|位置[ASC|DESC]}]]

 

NONAMEAGE
1001AE12
1002BT14

(1) 查询年纪为12的学生姓名;

SELECT STUDENT.NAME FROM STUDENT WHERE AGE=12;

(2) 查询年纪在12至16岁之间的学生姓名;

SELECT STUDENT.NAME FROM STUDENT WHERE AGE BETWEEN 12 AND 16;

(3) 查询年纪在12至16岁之间的学生姓名;

SELECT STUDENT.NAME FROM STUDENT WHERE AGE NOT BETWEEN 12 AND 16;

(4) 查询所有姓名以A开头的学生的姓名;

SELECT STUDENT.NAME FROM STUDENT WHERE NAME LIKE 'A%';

(5) 列出所有学生年纪的和,年纪的平均值,最大值,最小值,最大值与最小值之间的差值;

SELECT AVG(AGE), SUM(AGE), MAX(AGE), MIN(AGE), MAX(AGE)-MIN(AGE);

(6) 将所有学生按学号顺序升序排列;

SELECT * FROM STUDENT ORDER BY NO DESC;

(7) 将所有学生按学号顺序升序排列;

SELECT * FROM STUDENT ORDER BY NO ASC;

例如:对于STUDENT表:
在已存在的表中增加新列,语句句法:
注意:当用户需要新的数据结构或表存放数据时,首先要生成一个表。 语法:


 
blues_j @ 2006-10-16 20:09

对于基本声明

1.       const int r=100; //标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域为此文件,编译器经过类型检查后直接用100在编译时替换

2.       extend const int r=100; //const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义

3.       const int r[ ]={1,2,3,4};

struct S {int a,b;};
const S s[ ]={(1,2),(3.4)}; //
以上两种都是常量集合,编译器会为其分配内存,所以不能在编译期间使用其中的值,例如:int temp[r[2]];这样的编译器会报告不能找到常量表达式

对于指针

1.       const int *r=&x; //声明r为一个指向常量的x的指针,r指向的对象不能被修改,但他可以指向任何地址的常量

2.       int const *r=&x; //与用法1完全等价,没有任何区别

3.       int * const r=&x; //声明r为一个常量指针,他指向xr这个指针的指向不能被修改,但他指向的地址的内容可以修改

4.       const int * const r=&x; //综合13用法,r是一个指向常量的常量型指针

对于类型检查

可以把一个非const对象赋给一个指向const的指针,因为有时候我们不想从这个指针来修改其对象的值;但是不可以把一个const对象赋值给一个非const指针,因为这样可能会通过这个指针改变指向对象的值,但也存在使这种操作通过的合法化写法,使用类型强制转换可以通过指针改变const对象:
const int r=100;
int * ptr = const_cast<int*>(&r);  //C++
标准,C语言使用:int * ptr =(int*)&r;

对于字符数组

char * name = “china”; 这样的语句,在编译时是能够通过的,但是”china”是常量字符数组,任何想修改他的操作也能通过编译但会引起运行时错误,如果我们想修改字符数组的话就要使用char name[ ] = “china”; 这种形式。

对于函数

1.       void Fuction1 ( const int r ); //此处为参数传递const值,意义是变量初值不能被函数改变

2.       const int Fuction1 (int); //此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字。但这只对于内部类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左值使用),对于用户自定义类型,返回值是常量是非常重要的,见下面条款3

3.       Class CX; //内部有构造函数,声明如CX(int r =0)
CX  Fuction1 () { return CX(); }
const CX Fuction2 () { return CX(); }
如有上面的自定义类CX,和函数Fuction1()Fuction2(),我们进行如下操作时:

Fuction1() = CX(1); //
没有问题,可以作为左值调用
Fuction2() = CX(1); //
编译错误,const返回值禁止作为左值调用。因为左值把返回值作为变量会修改其返回值,const声明禁止这种修改。

4.       函数中指针的const传递和返回:
int F1 (const char * pstr); //
作为传递的时候使用const修饰可以保证不会通过这个指针来修改传递参数的初值,这里在函数内部任何修改*pstr的企图都会引起编译错误。
const char * F2 (); //
意义是函数返回的指针指向的对象是一个const对象,它必须赋给一个同样是指向const对象的指针。
const char * const F3(); //
比上面多了一个const,这个const的意义只是在他被用作左值时有效,它表明了这个指针除了指向const对象外,它本身也不能被修改,所以就不能当作左值来处理。

5.       函数中引用的const传递:
void F1 ( const X& px); //
这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本,然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效。
**
另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性,且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙。

对于类

1.       首先,对于const的成员变量,只能在构造函数里使用初始化成员列表来初始化,试图在构造函数体内进行初始化const成员变量会引起编译错误。初始化成员列表形如:
X:: X ( int ir ): r(ir) {} //
假设r是类Xconst成员变量

2.       const成员函数。提到这个概念首先要谈到const对象,正象内置类型能够定义const对象一样(const int r=10;),用户自定义类型也可以定义const对象(const X px(10);),编译器要保证这个对象在其生命周期内不能够被改变。如果你定义了这样的一个const对象,那么对于这个对象的一切非const成员函数的调用,编译器为了保证对象的const特性,都会禁止并在编译期间报错。所以如果你想让你的成员函数能够在const对象上进行操作的话,就要把这个函数声明为const成员函数。假如f( )是类中的成员函数的话,它的声明形如:
int f( ) const; //const
放在函数的最后,编译器会对这个函数进行检查,在这个函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法
**
类的构造和析构函数都不能是const函数。

3.       建立了一个const成员函数,但仍然想用这个函数改变对象内部的数据。这样的一个要求也会经常遇到,尤其是在一个苛刻的面试考官那里。首先我们要弄清楚考官的要求,因为有两种方法可以实现,如果这位考官要求不改变原来类的任何东西,只让你从当前这个const成员函数入手,那么你只有使用前面提到的类型强制转换方法。实例如下:
//
假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函数f( )来对这个r进行++r操作,代码如下
void X::f( ) const
{  (const_cast<X*>(this)) -> ++r;  } //
通过this指针进行类型强制转换实现

另外一种方法就是使用关键字:mutable如果你的成员变量在定义时是这个样子的:
mutable int r ;
那么它就告诉编译器这个成员变量可以通过const成员函数改变。编译器就不会再理会对他的检查了。



 
blues_j @ 2006-10-16 08:37

新加坡创新的笔试充分暴露了我的某些知识点的薄弱,幸好亡羊补牢为时不晚。

#include "stdafx.h"
#include "iostream.h"

void print(int *a);
void print1(int a[][8]);
void print2(int a[][8]);

int main(int argc, char* argv[])
{
 //定义二维数组a[8][8],并赋值0——63
 int a[8][8];
 int b=0;
 for(int i=0;i<8;i++)
  for(int j=0;j<8;j++)
  {
   a[i][j]=b;
   b++;
  }
 
 //以三种方式调用函数显示数组
 print(*a);
 cout<<endl;

 print1(a);
    cout<<endl;

 print2(a);
 cout<<endl;

 //用指针方式显示a[5][6]
 cout<<*(*(a+5)+6)<<endl;   
 
 return 0;
}

void print(int *a)
{
 for(int i=1;i<=64;i++)
  cout<<*a++<<" ";  

}

void print1(int a[][8])
{
 for(int j=0;j<8;j++)
  for(int i=0;i<8;i++) 
     cout<<*(*(a+j)+i)<<" ";
}

void print2(int a[][8])
{
 for(int j=0;j<8;j++)
  for(int i=0;i<8;i++)
     cout<<a[j][i]<<" ";
}



 
blues_j @ 2006-10-13 10:03

赶在一些通信公司开始招聘之前看些移动通信网基本知识。感觉我们学校的计算机专业的课程范围还是太窄,应该普及点移动通信的知识,别老整来整去都是些老掉牙的网络通信和网络安全。搞了本通信网的傻瓜书,看点大概,摘录些要点如下。

 

移动通信网

移动通信是一种无线通信方式。在移动通信中,信息的发出者/接收者可能处于移动状态,这种在移动状态下进行的通信称为移动通信。  

移动通信系统的分类

按用途划分可以分为以下几种:

1、  集群移动通信:是一种大区制移动通信。它的特点是基站数量较少,天线高度较高,每个基站的覆盖半径为30 -50 公里 ,使得基站、手机的发射功率都很大。主要特点:整体覆盖范围小、频道数目少(容量小)、移动台体积大,特别是在用户密度高、业务量大时,整个系统根本无法满足用户的要求。集群移动通信系统常作为专用通信网为一些企业提供特殊的通信调度服务。

2、  蜂窝移动通信:是一种小区制移动通信。它的特点是把整个大范围的无线服务区划分成许多小区,小区覆盖半径小,一般为数千米,每个小区设置一个基站,负责本小区各个移动台的通信和控制,各个基站通过移动交换中心互相联系,并与市话局连接。各个小区基站位置为蜂窝状,可有效地避免各基站之间的相互干扰。蜂窝移动通信系统常作为公用通信网,可为密集用户群提供移动通信服务,目前常用的全球通移动通信系统就属于此类。

3、  卫星移动通信:利用卫星转发信号实现通信。卫星移动通信通常用在其它通信方式无法实现的地方,如海洋、森林、沙漠等。

4、  无绳电话  

按系统采用的信号处理技术分类,移动通信可分为模拟通信和数字移动通信。

在模拟移动通信系统中,主要采用模拟传输、频分多址等模拟信号处理技术,使用频段为800/900 MHZ,常称为第一代移动通信系统。
在数字移动通信系统中,主要采用数字传输、时分多址或码分多址等数字信号处理技术,使用频段为800/900 MHZ1.7/1.8 GHZ,常称为第2代、第2.5代、第3代移动通信系统。
 

移动通信系统的基本组成

通常移动通信系统是由移动台、基地站及控制网络组成。

移动终端是用户使用的通信终端,可通过基站接入到移动通信网中,获得移动通信服务;每个基站负责其所在地的无线发射覆盖,保持与覆盖范围内的移动终端的联系;各个基站都在控制网络的管理控制之下,控制网络还负责移动通信网与其它通信网之间的互连互通。

 
移动通信的传输特性

1、  多普勒效应问题。在移动通信中,当移动台移向基站时,其工作频率变高;远离基站时,其工作频率变低。这种随着移动台的移动而产生的频率偏移称为移动通信中的“多普勒效应”。通常移动台移动速度的快慢决定着频率偏移的大小。

2、  信号衰落较大。由于城市中高楼林地,地形复杂,导致接收信号的电场强度起伏不定,这种现象称为衰落。

 
移动通信主要技术

多址接入技术

在移动通信系统中是以信道来区分通信对象的,一个信道只容纳一个用户进行通话,多个同时通话的用户,互相以不同的信道来区分,彼此互不干扰,这就是多址通信。在无线电波覆盖区内,如何建立用户与无线信道之间的连接,就是多址接入问题,解决多址接入问题的技术就叫多址接入技术。

1、 频分多址(FDMA)技术

FDMA利用信号载波频率的不同来区分信道,在系统中将给丁的一个总的频段划分成若干等间隔的频道(又叫信道),每个不同频道分配给不同的用户使用。

FDMA技术的特点是技术成熟、稳定、容易实现且成本较低,对信号功率控制要求不严格。它的主要缺点是频谱利用率较低,每个用户都要占用一定的频带,基站需要多部不同载波频率发射机同时工作,设备多容易产生信道间的互调干扰。

FDMA系统通常应用在模拟移动系统中。

2、 时分多址(TDMA)技术

TDMA技术采用基于时间分割信道的方式,即把时间分割成周期性重复的时间段(帧),对每一个帧再分割成更小的时间段(时隙),以周期性重复的时隙作为传送信道,然后根据一定的分配原则,使每个移动用户只能使用指定的时隙作为传输信道收/发信号。

TDMA技术的主要特点:

(1)       TDMA系统的基站只需要一部发射机。

(2)       频率规划简单。

(3)       因为移动台只在指定的时隙中接受基站发给它的信号,因此在一帧的其它时隙中,可以完成其它任务。

(4)       TDMA系统设备必须有精确的定时和同步,保证各移动台发送的信号不会在基站发生重叠或混淆,并且能准确地在指定的时隙中接受基站发给它的信号。

3、 码分多址(CDMA)技术

CDMA技术中,不同用户传输信息所用的信号不是频率不同或时隙不同来区分,而是用各自不同的编码序列来区分,即靠信号的不同地址码来区分。各个地址码相互之间具有准正交性,以相互区别地址,而在频率、时间和空间上都可以重叠。也就说,每一个用户有一个区别其它用户的地址码,各个地址码彼此之间是互相独立、互相不影响的。

CDMA通信系统中,用户之间的信息传输也是由基站进行转发和控制的。为了实现双工通信,正向传输和反向传输各使用一个频率,即通常所谓的频分双工(FDD)。

CDMA移动通信系统与FDMA模拟移动通信系统或TDMA数字移动通信系统相比具有更大的系统容量、更高的话音质量以及抗干扰、保密性好等优点,是第三代数字移动通信系统说选择的多址接入方式。


蜂窝技术

从理论分析中发现,用正六角形的图形结构来构造无线服务小区要比其它形状结构效果更好,衔接更紧密,产生的相互干扰更小;因此现在划分小区都采用这种正六角形的图形结构。该结构看上去像是蜂窝,所以称为“蜂窝式移动通信”。

1、 宏蜂窝结构

在蜂窝移动通信系统中,建设大型的宏蜂窝小区,可取得尽可能大的地域覆盖率。在宏蜂窝结构中,每个小区的覆盖半径为1 -25 km ,基站天线尽可能做得很高。在实际的宏蜂窝小区内,通常存在着两种特殊的微小区域。一是“盲点”即由于电波载传播过程中遇到障碍物而造成的阴影区域,该区域通信质量严重低劣;二是“热点”,即由于通信业务负荷集中而形成的业务繁忙区域。以上两种问题的解决,主要依靠设置直放站、分裂小区等方法。

2、 微蜂窝技术

与宏蜂窝技术相比,微蜂窝技术具有覆盖范围小、传输功率低以及安装方便、灵活等特点,小区的覆盖半径为30 -300 m ,基站天线低于屋顶高度,传播主要沿着街道的视线进行。因此,微蜂窝可用来加大无线电地域覆盖率,消除宏蜂窝中的“盲点”,如地铁、地下室等。

3、 智能蜂窝技术

智能蜂窝技术是指基站采用具有高分辨率阵列信号处理能力的自适应天线系统,智能地监测移动台所处的位置,并以一定的方式将确定的信号功率传递给移动台的蜂窝小区。

 

CDMA移动通信系统

由于序列码的带宽远大于所能承载信息的信号的带宽,编码过程扩展了信号的频谱,所以也称为扩频调制,所产生的信号也称为扩频信号。

CDMA由于扩频信号扩展了信号的频谱,所以具有以下一系列不同于窄带信号的性能:

1、  很强的抗干扰能力。

2、  可进行多址通信。

3、  安全保密。

4、  抗多径干扰。

 
CDMA移动通信网的特点

1、  系统容量大

2、  系统容量配置灵活

3、  通话质量好

4、  频率规划简单

5、  延长手机电池寿命

6、  建网成本下降

 

第三代移动通信系统( 3G

第三代移动通信系统( 3G )也称为IMT-2000International Mobile Telecommunications 2000)。其设计目标是:话音质量应相当或接近于公众交换电话网(PSTN)的质量;满足移动情况下高速率和可变速率业务的需求,快速移动环境下,数据速率达到144kb/s;室内到室外或步行条件下,数据速率达到384kb/s;室内环境下,数据速率最高达到2 Mb/s;支持电路和分组交换数据业务;自适应无线接口技术支持Internet通信中下行链路流量大于上行链路流量业务;频谱高效的利用率;支持各类移动通信终端;可灵活增添新业务和技术;良好的兼容性能。

 
IMT-2000所包含的CDMA无线接口技术标准有以下三个:WCDMACDMA2000TD-SCDMA

 
IMT-2000系统的主要特点

1、  可形成无缝漫游的系统。第三代移动通信系统将是一个在全球范围内覆盖和使用的系统。它将使用统一的频段,具有统一的接口特性,满足统一的通信标准。

2、  具有支持多媒体业务的能力,特别是支持Internet业务的能力。

3、  便于系统过渡、演进。

4、  高频谱效率

5、  高服务质量

6、  低成本

7、  高保密性

 
IMT-2000系统得主要技术

1、  智能天线技术

2、  WAP技术:无线应用协议WAPWireless Application Protocol)已经成为当今数字移动电话和其它无线终端上无线信息和电话服务的实际世界标准。

3、  快速无线IP技术。快速无线IPWireless IP)技术是未来移动通信发展的重点,宽频带、多媒体业务是最终用户的基本要求。第三代移动通信技术因为使用了蜂窝移动电话呼叫原理,完全可以使移动结点采用并保持固定不变的IP地址,一次登录即可实现在任意位置上或在移动中保持与IP主机的单一链路层连接,完成移动中的数据通信。

4、  软件无线电技术。

5、  多载波技术

6、  多用户检测技术

7、  Rake多径分集接受技术



 

<script src="http://vip4.1tong.com.cn/link/count.php?id=241&show=pic" type="text/javascript"></script>

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script><script type="text/javascript"> _uOsr[20]="baidu"; _uOkw[20]="wd"; _uacct = "UA-247576-1"; _udn = "yculblog.com"; urchinTracker(); </script> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值