<以下微软面试题全来自网络>
<以下答案与分析纯属个人观点,不足之处,还望不吝指出^_^>
题:.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。
分析:首先54张牌分别用0到53 的数值表示并存储在一个整形数组里,数组下标代表纸牌所在的位置。接下来,遍历整个数组,在遍历过程中随机产生一个随机数,并以该随机数为下标的数组元素与当前遍历到的数组元素进行对换。时间复杂度为O(n) (注:所得到的每一种结果的概率的分母越大越好)
实现代码:
/**
Author:花心龟
Blog:http://blog.csdn.net/zhanxinhang
**/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void shuffle(int boke[]) //洗牌
{
int i,r,t;
srand((unsigned)time(NULL)); //随机数种子
for(i=0; i<54; i++)
{
r=(rand()%107)/2;
//交换
t=boke[i];
boke[i]=boke[r];
boke[r]=t;
}
}
int main()
{
int boke[54],i;
for(i=0;i<54;i++) //初始化纸牌
boke[i]=i;
printf("before shuffle:\n");
for(i=0; i<54; i++) //打印
printf("%d ",boke[i]);
shuffle(boke); //洗牌
printf("\nafter shuffle:\n");
for(i=0; i<54; i++) //打印
printf("%d ",boke[i]);
return 0;
}
题:写一个函数,检查字符串是否是整数,如果是,返回其整数值。
(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)
分析:略
实现代码:
/**
Author:花心龟
Blog:http://blog.csdn.net/zhanxinhang
**/
#include <stdio.h>
long convert(const char *str) // 4行代码?下面我用了四句语句,不知当不当否,权当娱乐^^
{
long value=0,f=1; //f将决定value是否为负数
if(*str == '-') str++,f=-1;
for(;*str!='\0' && *str>='0' && *str<='9'; str++)
value=value*10+(*str-'0');
return *str=='\0'?value*f:0; //如果不为整数返回
}
int main()
{
char str0[] = "1234567";
printf("%d\n",convert(str0));
char str1[] = "4.56";
printf("%d\n",convert(str1));
char str2[] = "-1234567";
printf("%d\n",convert(str2));
char str3[] = "-4.56";
printf("%d\n",convert(str3));
return 0;
}
上一篇:每日微软面试题——day 1
======= welcome to my HomePage(http://blog.csdn.net/zhanxinhang) to have a communication =======