今天收到通知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上来