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

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

题目一、分苹果

M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放。

1<=M<=10,1<=N<=10

例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法

输入 7 3

输出 8

题目分析:

这道题类似于整数划分的题目,这是很早的一道ACM的题目,主要思路就是考递归。

①当苹果数目或者篮子数目为1时候,就只有一种可能

②当苹果数目小于篮子数目的时候,按照苹果数目来分配

③当苹果数目大于篮子数目的时候,空一个盘子 + 先每个盘子放一个之后再m-n个随便放

③当苹果数目等于篮子数目的时候,每个盘子放一个 + 空一个盘子

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

参考代码:

//分苹果.cpp
//2014.7.12 hepanhui
#include <iostream>
using namespace std;

int SharingApple(int m, int n)
{
    if(m == 1 || n == 1)
        return 1;
    if(m < n)
        return SharingApple(m , m);
    else if(m > n)
        return SharingApple(m, n-1) + SharingApple(m-n, n);
    else
        return 1 + SharingApple(m, n-1);
}

int main()
{
    int M,N;
    cin >> M >> N;
    cout << SharingApple(M,N) << endl;
    return 0;
}

调试过程中易犯错的地方:

①苹果数小于篮子数目的时候,直接按照苹果来分配。不是SharingApple(n, n)哦。

②m == 1不能笔误写成=

题目二:算日期

输入一个日期,输出这是这一年的第几天。(题目中没有给出闰年的定义)

输入 20131231

输出 365

题目分析:

该题目主要考察switch语句的使用和润年的判断;还需要注意的是输入的时候没有空格,说明我们不知道哪个是年哪个是月哪个是日,所以我们要看成一个字符串的输入。

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

参考代码:

//算日期.cpp
//2014.7.12 hepanhui
#include <iostream>
#include <string>
using namespace std;

int CalculatingDate(int year, int month, int day)
{
    int flag = 0;
    if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        flag = 1;
    int cnt = 0;
    for(int i = 1;i < month; i++)
    {
        switch(i)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10: cnt += 31;break;
            case 2: cnt += 28 + flag;break;
            case 4:
            case 6:
            case 9:
            case 11: cnt += 30;break;
        }
    }

    cnt += day;
    return cnt;
}

int main()
{
    string str;
    int year,month,day;
    cin >> str;
    year = (str[0] - ‘0‘) * 1000 + (str[1] -‘0‘) * 100 + (str[2] - ‘0‘) * 10 + (str[3] - ‘0‘);
    month = (str[4] - ‘0‘) * 10 + str[5] - ‘0‘;
    day = (str[6] - ‘0‘) * 10 + str[7] - ‘0‘;
    cout << CalculatingDate(year,month,day) << endl;
    return 0;
}

调试中易犯的错误:

①注意switch语句的写法,记住不一样的情况应该加上break

②注意输入必须要看成字符串,再转化成整型

③注意string输入的时候,一定要加上头文件#include<string>

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

时间: 2024-12-06 22:07:46

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

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

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

2014华为机试(一)

/************************************************************************************************** //华为2014校招机试题 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序, 若字符串中出现多个相同的字符,将非首次出现的字符过滤掉. 比如字符串"abacacde"过滤结果为"abcde". 要求实现函数:void stringFilter(

2015华为机试—— 输入整型数组和排序标识,对其元素按照升序或降序进行排序

接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag); 输入参数: Integer[] pIntegerArray:整型数组 int  iSortFlag:排序标识:0表示按升序,1表示按降序 输出参数: 无 返回值: void 这题比较简单,也没什么思路好说,直接看代码 代码如下: public final class Demo { // 功能:输入整型数组,对其元素按照升序或降序进行排序 // 输入:pI

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

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

2014年6月6日--华为机试

准备了还有一段时间了,结果还是悲剧了,主要准备的是算法,结果华为机试更看重字符串的操作,这一块正好是自己的弱项,哎.不过还有时间,这几个月多刷刷题,多锻炼锻炼,加油吧. 机试一共考了三道题,两道简单点的,一道难题,难题考得是状态机,不知道是什么东西╮(╯▽╰)╭,简单的两题做的也不好,回来在重新做一下.   1.倒置英文句子中单词的字母顺序. hello, I am good.  ->  olleh, I ma doog. 这题其实不难,当时脑子有点纠结符号,所以没做出来,还有一点客观原因,平时

2014深圳华为机试剖析

题一: (1)给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况.最大递减数:所输入整数的所有递减数中值最大的一个. 如: 75345323,递减数有:75,753,53,53,532,32.那么最大的递减数为753. 各位数字之和最大的递减数: 如75345323中的各递减数:75各位数之和=12(7+5=12),753各位数之和=15(7

[华为机试真题][2014]63.等式变换

题目 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入: 正整数,等式右边的数字 输出: 使该等式成立的个数 样例输入:5 样例输出:21 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 *

[华为机试真题][2014]64.实现两个合法时间相加

题目 描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果:注意,相加后的结果也必需是一个合法的时间: 附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间: 运行时间限制: 无限制 内存限制: 无限制 输入: 时分秒格式的时间字符串,如00:00:00 输出: 时分秒格式的时间字符串,如00:00:00 样例输入: 00:00:00 00:00:01 样例输出: 00:00:01 答案提示: 建议将时间转换为秒数

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程