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 << "." ;
}
else
cout << "-" << 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)这道题目输出格式须要细致书写。


2014华为机试西安地区B组试题的更多相关文章

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

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

  2. 华为机试001:字符串最后一个单词的长度(华为OJ001)

    华为机试 字符串最后一个单词的长度 计算字符串最后一个单词的长度,单词以空格隔开. 提交网址: http://www.nowcoder.com/practice/8c949ea5f36f422594b ...

  3. 华为机试ACM(字符组合问题)

    今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...

  4. 华为机试正式版(西安c/c++/java),今天下午去机试的题目,新奇出炉了!

    下面题目都是回顾的.题目都非常easy, 大家有些基础就能够參加!(语言能够是c/c++.也能够是java的) 题目一(60分): 字符串操作. 将小写转换成大写, 将大写转化为小写, 数字的不做转换 ...

  5. 【华为机试】找最高分(通过此题熟悉牛客网Node输入输出)

    来源:牛客网 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据.每组输入第一行是两个正整数N和M(0 ...

  6. 华为机试_字符串识别_Vector的使用;

    第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu  ...

  7. 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试

    import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...

  8. 2015华为机试——数字基root

    题目描写叙述: 求整数的Root:给定正整数,求每位数字之和;假设和不是一位数,则反复; 输入:输入随意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行相 ...

  9. 华为机试 之 joseph环

    一:首先科普一下约瑟夫问题的数学方法 (1)  不管是用list实现还是用vector实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比較烦,并且时间复杂度高达O(nm),当n,m很大(比如上百 ...

随机推荐

  1. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  2. 验证码 Captcha 之大插件

    验证码 Captcha 之大插件小用 不知何年何月才能完成OADemo啊,总之还是一步一步来吧,这段时间开始着手了,先做登陆.  前段时间研究了一下在CentOS7下安装Mysql和Memcached ...

  3. 《转》VC++多线程编程

    原地址:http://www.cnblogs.com/wxfasdic/archive/2010/09/23/1833522.html 留个纪念,不错的总结.十个例子清晰列举啦多线程编程的奥妙.  V ...

  4. UVa 10188 - Automated Judge Script

    题目:给你一些题目的输出结果,推断是AC,PE还是WA. 分析:模拟. 依照题意模拟就可以,注意PE条件为全部数字字符出现顺序同样就可以. 说明:想起非常多年前写的OJ的后台判题程序了╮(╯▽╰)╭. ...

  5. Linux共享wifi给Android手机

    亲測可行,測试系统:Deepin2014,Ubuntu也一样.步骤很easy. 1.卸载hostapd,sudo apt-get remove hostapd(假设原来装过的话卸载,由于某些版本号不支 ...

  6. android编译自己 内置的jar做法

    1.首先 android.mk LOCAL_PATH := $(call my-dir) # ===================================================== ...

  7. tolua 有些功能可以用(经过测试)

    tolua 提供几个 C++ 与 Lua 进行数据交换的工具函数. ~~ tolua.type 返回一个 C++ 对象的类型描写叙述字符串. local node = display.newNode( ...

  8. WebView混合开发

    现在开发APP的方式变化,不在是传统的APP开发了,有很多的APP慢慢的转向混合模式的开发,使用WebView是传统开发模式转向混合模式的桥梁工具,结合了很多的Web前端开发界面,使得开发的速度加快, ...

  9. HTML5: Screen Orientation API

    媒体的询问取决于智能手机和平板布局调整的方向一致网站.但有时候你被锁定在一个希腊网站特定方向.横向或纵向.此时,是本机格式可以指定保健应用. APP只显示在一个预设格式-独立于实际设备方向.通过使用H ...

  10. Coreseek:indexer crashed神秘

    浩哥前两天让我再Coreseek该指数再次这样做,由于需求方面变化不大,公司名称应出现指数.在添加的配置文件的面孔sql_field_string:串场.. 此属性特别有用,因为它不仅作为过滤器的特性 ...