1:给定一个整数(有可能是负数),将整数变成字符串。函数已经声明好类似void change(int number, char s[])的形式。可以自己写用例测试
解:基础题目
解法一
void change(int number, char s[])
{
itoa(number,s,10);
}
解法二
void change(int number, char s[])
{
//以十进制转换
int tmp=number,index=0,count=0;//用来计算number的位数
while(tmp!=0)
tmp=tmp/10,++count;//注意此处用了逗号表达式
number>0?true:(s[0]='-',++index);
s[count+index]='\0';
for(;count;s[index+(--count)]=abs(number)%10+48,number/=10);//要加48:)
}
2:给定一个已经定义好的单链表,将单链表中的数字逆序。输入为head指针,返回的也是一个head指针。函数声明为void sor(Node **head)的形式。
解,链接的逆转算法
void sor(Node **head)
{
Node *p=*head,*q,*s;
if(!p||!p->next)//head=NULL,或者只有一个元素返回
return ;
q=NULL;
s=p->next;
while(s)
{
p->next=q;
q=p;
p=s;
s=s->next;
}
p->next=q;
*head=p;
}
3:有一个数组a[N]如a[10]={0,1,2,3,4,5,6,7,8,9}每隔两个数删除一个数,如0,1,2(删除),3,4,5(删除),6,7,8(删除),9,到数组尾部回到数组头部继续删除,要求编写一个函数实现实现上述操作,返回最后一个数的数组下标。函数接口:int getLast(int iLen),参数:数组初始元素个数iLen
解:基本算法
int getLast(int iLen)
{
int *data=new int[iLen];
for(int i=0;i<iLen;i++)
cin>>data[i];
int cnt=iLen,index=0,flag=1,last;
while(cnt>1)
{
++index;
if(data[index%iLen]!=-1)
{
++flag;
}
if(flag==3)
{
data[index%iLen]=-1;
flag=0;
--cnt;//将数组无数减1
}
}
for(int j=0;j<iLen;j++)//这种方法效率不高,要再一次循环,求坐标
if(data[j]!=-1)
last=j;
return last;
}