2014华为机试西安地区B组试题

题目一、亮着点灯的盏数
一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。開始,电灯所有关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。不能写双重循环,会执行超时。
输入 65535
输出 255
题目分析:
对于不论什么一盏灯,因为它原来不亮,那么当它的开关被按奇数次时,灯是开着的;当它的开关被按偶数次时,灯是关着的;一盏灯的开关被按的次数,恰等于这盏灯的编号的因数的个数;要求哪些灯还亮着,就是问哪些灯的编号的因数有奇数个.显然全然平方数有奇数个因数。每一个数除以一个数A等于还有一个数B,那么A和B都是它的因数,于是因数是成对出现的,可是要因数是奇数,就必须A=B所以这个数就必须是一个是的平方得到的。
综上所述这道题很easy,就是找1-65535中全然平方数的个数。我们利用枚举法

=========================================================================
參考代码:

//亮着点灯的盏数.cpp
//2014.7.9 hepanhui
#include <iostream>
using namespace std;
int main()
{int n;int cnt = 0;cin >> n;for(int x = 1; ; x++){int y = x*x;if(y > n)break;cnt ++;}cout << cnt << endl;
}

调试过程中易错地方,我们要把cnt++放在跳出循环的后面,否则次数会比正确答案多一次。

题目二:同样字符
输入一个字符串,推断是否含有同样的子串(字串长度大于1),是,输出1,否,输出0。
比如12312含有两个12,所以输出1;23456则没有同样子序列,输出0.
输入:12312
输出:1
题目分析:我们首先採用双循环来处理,之后再用一个while语句,最后採用中间变量进行一个转换。

=======================================================================

參考代码:

//同样字符.cpp
//2014.7.10 hepanhui
#include <iostream>
#include <string>
const int maxn = 1000;
using namespace std;int Equalchar(char *str)
{//非法输入if(str == NULL)return 0;int cnt = 0;int p,q;int len = strlen(str);for(int i = 0; i < len;i++){for(int j=i+1; j < len;j++){p = i;q = j;while(str[p] == str[q]){p++;q++;cnt++;}if(cnt > 1)return 1;cnt = 0;}}return 0;
}int main()
{char s[1000];gets(s);cout << Equalchar(s) << endl;return 0;
}

调试过程易错的地方:
①输入字符串有可能有空格。所以不能用cin
②用gets(s)一定要注意加上头文件#include<string>
③记住要採用中间变量,由于推断的时候保证ij不发生变化,所以採用中间变量。
④记住cnt一直要每次while之后置0

题目三、整数相除
两个整数相除,将结果用字符串返回。假设是循环小数,将循环的位用括号括起来。
函数原型为 void div(const int a,const int b,char *str)
输入:1 3
输出:0.(3)
题目分析:
这道题比循环小数的题目多有一点点东西,那就是要推断ab的正负性,其它都一样。
难点在于循环循环小数的周期和循环长度,所以我们这里定义两个数组
int reminder_exist[max_INT];int reminder_pos[max_INT];

==============================================================================
參考代码:

//整数相除.cpp
//2014.7.9 hepanhui
#include<iostream>
#include<string>
using namespace std;
const int maxn = 100; //设置字符串的最大位数
const int max_INT = 10000;
int reminder_exist[max_INT];
int reminder_pos[max_INT];void div(const int a, const int b, char *str)
{int numerator,denominator,quotient, reminder, outcnt = 0;int flag = 0; //负数标志int original_numerator = a; //求整数部分用到的分子memset(reminder_exist, 0, sizeof(reminder_exist));memset(reminder_pos, 0, sizeof(reminder_pos));numerator = a; //因为定义const int所以我们要改变分子分母时候,所以我们通过中间变量转化denominator = b;if(a*b < 0)flag = 1;//将分子和分母变成整数numerator = numerator < 0 ? -numerator:numerator; denominator = denominator < 0 ? -denominator:denominator;quotient = numerator/denominator;reminder = numerator%denominator;   int integer = quotient;//找出循环//int found_cycle = 0; int cycle_pos = maxn; //循环的位置int cycle_len = 0; //初始化循环长度int i = 0;for(i = 0; i <= maxn; i++){//找出余数相等的情况,求出循环周期if(reminder_exist[reminder]){cycle_pos = reminder_pos[reminder];cycle_len = i - cycle_pos;break;}else{reminder_exist[reminder] = 1;reminder_pos[reminder] = i;}numerator = reminder *10;quotient = numerator/denominator;reminder = numerator%denominator; str[outcnt++] = quotient + '0'; //将更新的商存入字符串中}str[outcnt++] = '\0';if(!flag){cout << integer << "." ;}elsecout << "-" << integer << ".";for(int j = 0; j < cycle_pos; j++)cout << str[j];cout << "(";for(int j = cycle_pos; j < i;j++)cout <<  str[j];cout << ")" << endl;
}int main()
{int a,b,flag = 0;char s[maxn];cin >> a >> b;if(!a && !b)return 0;div( a, b,s);return 0;
}

调试过程易犯的错误:
①主函数和子函数变量的设置,和非法输入的安排自己比較混乱;
②讨论负数的情况,直接要将负数变成整数来循环,学会用 ? : 三目运算符
③定义输出是字符串型,我们不能直接str[outcnt++] = quotient;由于quotient是一个数,所以我们必需要加上+‘0’
④仍然须要提醒的是字符串数组存入的题目,要注意
1)outcnt要初始化为0
2)str[outcnt++]中++不能忘记
3)str[outcnt++] = '\0'
4)主函数定义的时候char str[maxn];
5)这道题目输出格式须要细致书写。

转载于:https://www.cnblogs.com/mfrbuaa/p/3980970.html

2014华为机试西安地区B组试题相关推荐

  1. 2014华为机试西安地区A组试题

    2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...

  2. 2014华为机试,计算给定和牌麻将的番数

    一.题目如下 二.题目分析 麻将和牌有两种形式,即: 模式1 :11,11,11,11,11,11,11 模式2: 11,123,123,123,123(全部或者部分123可以被111,1111替代) ...

  3. [华为机试真题][2014]62.去除重复字符并排序

    题目 描述: 去除重复字符并排序 运行时间限制: 无限制 内容限制: 无限制 输入: 字符串 输出: 去除重复字符并排序的字符串 样例输入: aabcdefff 样例输出: abcdef 代码 /*- ...

  4. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  5. 牛客网–华为机试在线训练5:进制转换

    牛客网–华为机试在线训练5:进制转换 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该 ...

  6. 【华为机试真题 Python实现】查找众数及中位数

    文章目录 前言 题目描述 示例 1 示例 2 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会 ...

  7. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  8. 华为机试--字符串ASC码+偏移量实现加密

    华为机试–字符串ASC码+偏移量实现字符串加密的JS实现 题目描述:给出原文字符串str,通过对字符串的每个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量.数组 ...

  9. 【华为机试真题Java】从入门到入职-真题列表导读

    写在前面 本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题.大家有什么不懂的都可以留言. 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100 ...

  10. 《华为机试》刷题之HJ84 统计大写字母个数

    <华为机试>刷题之统计大写字母个数 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 找出给定字符串中大写字符(即'A'-' ...

最新文章

  1. 为什么要学网络营销?
  2. wrf_input文件解析(PART1)未完
  3. 数独java界面基础_java版数独游戏界面实现(二)
  4. css3动画 --- Transition
  5. 如何打破线下流量瓶颈?三四线城市实体门店的生存之道
  6. Java 常用对象-System类
  7. golang学习的点点滴滴:if、switch使用
  8. 土人系列AS入门教程--对象篇
  9. php中dialog使用方法,window.dialogArguments 使用说明
  10. AD7705模块设计(附源码)
  11. Java程序员:快来像我这样做,3天辞退不是梦
  12. 2021河南普通话考试的时间和内容
  13. Apache Spark【从无到有从有到无】【编程指南】【AS5】结构化流编程指南
  14. 文档自动分类模型--分类算法思路总结
  15. FCKeditor编辑器
  16. BZMCTF:流量监控平台
  17. Qt继承QWidget或者QWidget直接弹出窗口(非模态对话框)(对话框)
  18. oracle数据库容灾一体机,信息技术中心组织开展“Oracle数据库一体机简介及运维”培训活动...
  19. 时序InSAR选点精讲
  20. Tawk.to一键给自己的网站增加在线客服功能

热门文章

  1. Kubernetes 小白学习笔记(17)--集群安全-APIServer的安全模型
  2. Kubernetes kubectl The connection to the server localhost:8080 was refused - did you specify the rig
  3. 微信小程序云开发教程-云函数入门(2)-接收参数、前端调用
  4. for ihs linux_在IBM的IHS上编译PHP(redhat 5.5 64位的环境)
  5. 十九、Oracle学习笔记:行变量
  6. 情人节到了,Postman 都脱单了,那你咧?
  7. RedisTemplate 概述 与 操作 Redis 5 种数据类型
  8. Spring boot 2.x 错误处理机制 与 定制错误页面
  9. android activity使用,Android Activity使用拾遗
  10. 小D课堂 - 新版本微服务springcloud+Docker教程_5-06 高级篇幅之深入源码