航天桥网站建设,广告网络营销策略,揭阳网站制作建设,网站改版做301/*******************************************************************************
文 件 名 : test100.cpp
实现功能 : 微软面试题#xff1a;有100万个数字#xff08;1到9#xff09;#xff0c;其中只有1个数字重复2次#xff0c;如何快速找出该数字补充下题目 意思…/*******************************************************************************
文 件 名 : test100.cpp
实现功能 : 微软面试题有100万个数字1到9其中只有1个数字重复2次如何快速找出该数字补充下题目 意思我这里每个数字 都是个阿拉伯数字,是1位的,是1到9之间的但是有1百万个这样的数字 比如 12345678912 是11个这样的数字
实现思路 : 定义9个数组记录1-9的出现的数字做标记出现一次则对应数组加1超过2次在下次循环直接结束这样一共直到记录8个数字后直接打印第9个数字就是一共只会出现2次的数字了
作 者 : jernymy
版 权 : Copyright(C) ... jernymy.
日 期 : 2011-07-28
版 本 : V1.0
*******************************************************************************/#include stdio.h
#include stdlib.h // srand
#include time.h // time
#include string.h // memset// 最大的数据是100万 1000000
#define MAX_NUM 1000*1000// 出现频率的个数
#define OVER_VAR 2// 记录1-9这几个数字出现的次数是否出现超过2次
// 如果超过2次可以不用判断初始化为0
unsigned char g_abyNumAry[10];// 记录总共出现超过3次的数字的个数当超过7个时即为8时。
// 则可以直接打印出没有出现超过2次的那个数字就一定是公出现2次的数字了。
unsigned char g_nCount 0;int main(void)
{int nIdx;int nData;time_t nCurTime; srand(time(nCurTime));memset(g_abyNumAry, 0, sizeof(g_abyNumAry));for (nIdx 0; nIdx MAX_NUM; nIdx){nData rand()%9 1; // 随机数从1到9测试专用jernymy from 1-9printf(%d , nData); // 打印该随机数字// 此数字出现次数大于2次则退出次循环if (g_abyNumAry[nData] OVER_VAR){continue;}// 此数字出现1次在大于2次时就对总个数加1if (g_abyNumAry[nData] OVER_VAR){g_nCount;}// 当有8个数字出现的个数均超过2次// 那么剩下的那个数字一定就是要求的了if (g_nCount 8){printf(\nfound only 2 num: );for (nIdx 1; nIdx 10; nIdx){if (g_abyNumAry[nIdx] (OVER_VAR1)){// jernymy 此数就是我们要找的那个了printf(%d\n, nIdx);}}break;} }return 0;
}