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;
}