1. 字符串轉數字
字符‘0’對應ASCII碼48,‘0’轉化成整形數字0,int i=ch-48;同理char ch=i+48;
題目:將字符串“326”,“+326”,“-326”轉換成對應的數字輸出:326,+326,-326
#include<stdio.h>
#include<string.h>
int StringInt(const char *str)
{
int i,length,value,flag;
length=strlen(str);
flag=1;
value=*(str+length-1)-48; //個位
for(i=length-2; i>=0; --i)
{
if(*(str+i)=='+')
break;
else if(*(str+i)=='-')
value=-value;
else
{
flag *= 10;
value+=(*(str+i)-48)*flag;
}
}
return value;
}
int main(void)
{
printf("%d\n",StringInt("326"));
printf("%d\n",StringInt("+326"));
printf("%d\n",StringInt("-326"));
return 0;
}
2.斐波那契數列
f(n)=f(n-1)+f(n-2),n>=2. 考察遞歸,先計算f(0),f(1)最後計算f(n),時間複雜度最低爲O(n)
2.1 循環
#include<stdio.h>
int main(void)
{
int i,result_two,result_zero=0,result_one=1, n=50;
for(i=2;i<=n;++i)
{
result_two=result_one+result_zero;
result_zero=result_one;
result_one=result_two;
printf("%d",result_two);
}
return 0;
}
2.2 遞歸
long long Fibonacci(unsigned int n)
{
if(n>=2)
return Fibonacci(n-1)+Fibonacci(n-2);
else if(n==1)
return 1;
else
return 0;
}
遞歸簡潔,但當遞歸層級加深時,容易發生棧溢出。
3.字符串壓縮——壓縮連續重複出現的字符
題目:輸入”aabbcc“ 輸出”abc“。 輸入”abcdef“ 輸出”abcdef“
#include<stdio.h>
#include<string.h>
void StrZip(char *pInputStr, int StrLength, char *pOutputStr)
{
int i,j;
bool hash[26]={0};
for(int i=0,j=0; i<StrLength;)
{
if(hash[pInputStr[i]-'a']==false)
{
hash[pInputStr[i]-'a']=true;
pOutputStr[j++]=pInputStr[i++];
}else
++i;
}
pOutputStr[j]='\0';
}
int main(void)
{
char pInputStr[20],pOutputStr[20];
int StrLength;
while(scanf("%s",pInputStr) != EOF)
{
StrLength=strlen(pInputStr);
StrZip(pInputStr,StrLength,pOutputStr);
puts(pOutputStr);
}
return 0;
}
上述代碼在VS2010經驗證運行通過!後繼相關請查閱 華爲歷年機試題型總結系列(二)