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