class A
{
public:
A(){ doSth(); }
virtual void doSth(){printf("I am A");}
};
class B:public A
{
public:
virtual void doSth(){ printf("I am B");}
};
B b;
void main()
{
char text[1000]={"As a technology , 'HailStorm' is so new that it is still only known by its code name."};
int i=0,count=0;
bool flag=true;
while (text[i]&&i<1000)
{
if (text[i]==' ')
{
flag=true;
}
else if (flag==true && ((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z')))
{ // 前有空格,接着出现字母,表示出现一个单词。
count++;
flag=false;
}
i++;
}
cout<<count;
}
#i nclude <iostream.h>
#define QUEEN 8 //皇后数量
int queen[QUEEN] ; //下标代表所在列号,值代表所在行号,
//如queen[1]=2表示第1列第2行有个皇后
bool row_YN[QUEEN] ; //棋局的每一行是否有棋,有则为1,无为0 ;
bool passive_YN[2*QUEEN-1] ; //斜率为1的斜线方向上是否有棋,共有2*QUEEN-1个斜线
bool negative_YN[2*QUEEN-1] ; //斜率为负1的斜线方向上是否有棋
//用全局变量,因全局数组元素值自动为0
int main()
{
int row = 0 ;//游标,当前移动的棋子(以列计)
bool flag = false ; //当前棋子位置是否合法
queen[0] = -1 ; //第0列棋子准备,因一开始移动的就是第0列棋子
int count = 0 ; //一共有多少种解法的计数器 ;
while(row>=0 ) //跳出条件是回溯到无法回溯时
{
queen[row]++ ; //row列上的皇后走到下一行试试
if(queen[row] >= QUEEN) //当前列全部走完
{
queen[row] = -1 ; //当前列棋子置于准备状态
row-- ; //回溯到上一列的棋子
if(row>=0) //回溯时要清理如下行,斜线的标志位
{
row_YN[queen[row]] = false ;
passive_YN[queen[row] + row] = false ;
negative_YN[QUEEN-1 + row - queen[row]] = false ;
}
}
else
{
//先判断棋子所在行没有棋子
if(row_YN[queen[row]] == false)
{
flag = true ;
//以下检查当前棋子是否与之前的棋子斜线相交
if( passive_YN[queen[row] + row] == true || negative_YN[QUEEN-1 + row - queen[row]] == true)
flag = false ;
else
flag = true ;
if(flag) // flag为真表示位置合法
{
if(row == QUEEN-1) //列到达最后,即最后一个皇后也找到位置,输出解
{
count++ ; //解法的数目加一 ;
cout<<"***第"<<count<<"种解法***"<<endl ;
for(int i=0;i<QUEEN;i++)
cout<<"第"<<i<<"列皇后在第"<<queen[i]<<"行"<<endl;
}
row_YN[queen[row]] = true ;// 当前行设为有棋子
passive_YN[queen[row] + row] = true ;//当前行正斜率方向有棋子
negative_YN[QUEEN-1 + row - queen[row]] = true ; //当前行负斜率方向上也有棋子
row++ ;
if(row >= QUEEN)
{ // 找到解后再次回溯找另外的解,这同上面无解回溯是一样的
row-- ;
row_YN[queen[row]] = false ;
passive_YN[queen[row] + row] = false ;
negative_YN[QUEEN-1 + row - queen[row]] = false ;//原理同回溯
}
flag = false ;
}
}
}
}
cout<<QUEEN<<"皇后问题一共有"<<count<<"种解法"<<endl ;
return 0 ;
}
#i nclude <iostream.h>
#define MAX 100
int str_num(char str[]) //计算字符串的长度,等效于strlen(str);
{
int i=0,num_str=0;
while(str[i]!=0)
{num_str++;
i++;
}
return(num_str);
}
void place(int num_str,char str[]) //将字符串高低颠倒。
{
int temp=0,i=0,j=0;
for(i=0,j=num_str-1;i<j;i++,j--)
{temp=str[j];
str[j]=str[i];
str[i]=temp;
}
}
void transition(unsigned int a[],char str1[]) //数字字符转化为数字。
{
int i=0;
while(str1[i]!=0)
{a[i]=str1[i]-'0';
i++;
}
}
void multiply_int(unsigned int a[],unsigned int b[],unsigned int c[]) //大数相乘算法,入口为整形数组。
{
int i=0,j=0;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
{
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
void output(int sign,unsigned int c[],int quan) //数据输出。
{
int sign_temp=0,i=0;
cout<<"The result is: ";
if(sign==1)
cout<<"-";
for(i=MAX-1;i>-1;i--)
{
if(sign_temp==0)
{if(c[i]!=0)
sign_temp=1;
}
if(sign_temp==1)
{
if(i==quan-1)
cout<<".";
cout<<c[i];
c[i]=0;
}
}
cout<<endl;
}
void multiply_string(char str1[],char str2[],unsigned int c[]) //大数相乘,入口为字符串。
{
unsigned int a[MAX]={0},b[MAX]={0};
int sign=0;
transition(a,str1);
transition(b,str2);
multiply_int(a,b,c);
}
int sign_comp(char str1[],char str2[]) //符号判断,如果为负数将作相应处理。
{
int i=0,sign_num=0;
if(str1[0]==45)
{sign_num=!sign_num;
for(i=0;i<MAX-1;i++)
str1[i]=str1[i+1];
}
if(str2[0]==45)
{sign_num=!sign_num;
for(i=0;i<MAX-1;i++)
str2[i]=str2[i+1];
}
return (sign_num);
}
int format(char str[]) //将输入的字符串进行格式化。以得到字符的一些标志信息和相应格式的新数据串。
{
int point=0,quan=0,i=0,j,k=0,sign_point=0,num_str=0;
num_str=str_num(str);
while(str[i]!=0)
{
if(str[i]<'0'||str[i]>'9')
if(str[i]!='.')
{cout<<"data error"<<endl;
return(-1);
}
else
{point++;
sign_point=i;
}
if(point>1)
{cout<<"data error"<<endl;
return(-1);
}
i++;
}
if(point==1)
{
for(j=sign_point;j<num_str;j++)
str[j]=str[j+1];
num_str--;
quan=num_str-sign_point;
}
place(num_str,str);
return(quan);
}
void clear(char str[]) //清空函数。
{
int i;
for(i=0;i<MAX;i++)
{
str[i]=0;
}
}
void main(void) //主函数。
{
char str1[MAX]={0},str2[MAX]={0};
int quan1=0,quan2=0,sign=0;
unsigned int c[MAX*2+1]={0};
do
{
cout<<"Please input the first number:";
cin>>str1;
cout<<"Please input the second number:";
cin>>str2;
sign=sign_comp(str1,str2);
quan1=format(str1);
quan2=format(str2);
if(quan1==-1||quan2==-1)
{
clear(str1);
clear(str2);
}
}while(quan1==-1||quan2==-1||str1[0]==0||str2[0]==0);
multiply_string(str1,str2,c);
output(sign,c,quan1+quan2);
}