[C/C++]2014年7月华为校招机试真题(二)

       今天收到通知12号上午9点半去参加华为机试,由于最近一直忙论文的事,就没空复习C++,也就没写博客,今天同学给了几道前几天的题,自己做了下,就拿出来给大家分享分享。

       前两道不难,很容易做出来,第三道对于非软件专业的同学来说就不那么容易了。

       建议大家最好把链表也稍微看下,据说这次考试有同学的第二题考到了约瑟夫环。

       说句题外话,最近在看《代码整洁之道》,英文叫clean code这本书,受益挺多的,大家有兴趣可以看一下(示例代码是用Java写的),对今后想要从事软件行业的同学来说还是非常有帮助的。

       回到正题,题目及我写的代码如下:


第一题:

大意如下:1,2,3。。。n展灯,同时有n个人,

                  第1个人将1的倍数的灯拉一下,
                  第2个人将2的倍数的灯拉一下,
                  问最后有几展灯是亮的,
                  初始状态灯是灭的,
                  输入整数n(n<65536) 
                  输出亮的灯数

int main()
{
   int n;
   int i,j;
   int sum = 0;

   std::cin >> n;
   std::cin.get();

   bool lightBulb[65536] = {0};

   for(i = 1;i <= n;i++)    //通过两嵌套循环模拟N个人一次拉灯
   {
	   for(j = 1;j <= n;j++)
	   {
		   if( j % i == 0 )
		   {
			   lightBulb[j - 1] = !lightBulb[j - 1]; //!为取非,~为按位取反
		   }	   
	   }  
   }

   for(j = 0;j < n;j++)
   {
	   if(lightBulb[j] != 0)      //统计灯泡亮着的个数
		   sum++;  
   }
   std::cout << sum;

   sum = 0;

system("pause");
return 0;
}

第二题:
       输入整数(n是小于9位数的整数),当作字符串处理,
       看是否有相同的子串,如1212,相同子串是12,
       141516则没有子串(子串长度必须大于等于2)。
       若有相同子串则输出1,否则输出0
       输入:长度小于9的整数 
       输出1或者0

#include <iostream>

int main()
{
	char input[10];
    int i = 0,j;
	int res = 0;
	std::cin >> input;

	for(i = 2;i < (strlen(input) - 1);i++)       //一个嵌套循环来检查是否有子串
	{
		for(j = i - 1;j >=0;j--)             //依次将字符与前面的字符比较,若相等则分别将这两个字符的下一个字符取出来进行比较
		{                                    //相等则说明至少有一个两个字符的子串
			if(input[i] == input[j] && 
				input[i + 1] == input[j + 1])
			{
				res = 1;             //有子串时,将结果置一
				break;
			
			}		
		}

    if(res == 1)
		break;
	}


	std::cout << res;   //输出结果
    system("pause");
    return 0;
}

第三题:

大意如下:

       输入整数m【视作分子】,整数n【视作分母】(m<n),

       输出小数形式,若是无穷小数保留小数部分100的长度,

       若小数部分循环则写成如下形式 比如1/3=0.(3)


这道题对博主来说相当有挑战性的,目前还没搞定,搞定了给大家po上来害羞



你可能感兴趣的:(C++,华为,2015,校招,机试)