网易笔试编程题

来源:互联网 发布:python socket select 编辑:程序博客网 时间:2024/05/16 14:38

下厨房

题目描述

牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

输入描述:

每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。

输出描述:

输出一行一个数字表示完成所有料理需要多少种不同的材料。
示例1

输入

BUTTER FLOURHONEY FLOUR EGG

输出

4
思路:利用集合set元素不重复的性质

#include<iostream>#include<set>#include<string>using namespace std;int main(){    string food;    set<string> set;    while(cin >> food){        set.insert(food);    }    cout << set.size() << endl;    return 0;}
数字翻转

题目描述

对于一个整数X,定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如:
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.
现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?

输入描述:

输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。

输出描述:

输出rev(rev(x) + rev(y))的值
示例1

输入

123 100

输出

223
思路:巧妙的数字翻转方式

#include<iostream>using namespace std;int rev(int m){    int temp = 0;    while(m != 0){       temp = temp * 10 + m % 10;       m /= 10;    }    return temp;}int main(){    int x, y;    while(cin >> x >> y)        cout << rev(rev(x) + rev(y));    return 0;}
统计回文

题目描述

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:
* 在A的第一个字母之前: "baba" 不是回文 
* 在第一个字母‘a’之后: "abba" 是回文 
* 在字母‘b’之后: "abba" 是回文 
* 在第二个字母'a'之后 "abab" 不是回文 
所以满足条件的答案为2

输入描述:

每组输入数据共两行。第一行为字符串A第二行为字符串B字符串长度均小于100且只包含小写字母

输出描述:

输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数
示例1

输入

abab

输出

2
#include<iostream>#include<string>using namespace std;int huiwen(string str){  //定义回文函数      int len = str.length();      for(int i = 0; i < len; i++){          if(str[i] != str[len - 1])              return false;          len -= 1;  //len的值不断变化,往中间靠拢      }      return true;}int main(){    string str1, str2, temp;    while(cin >> str1 >> str2){        int count = 0;        temp = str1;        int len = str1.length() + 1;        for(int i = 0; i < len; i++){            str1 = temp;  //重要的一步,将str1还原            str1.insert(i, str2);  //插入str2,判断新的字符串是否是回文            if(huiwen(str1))                count++;        }        cout << count <<endl;        return 0;    }}
买苹果

题目描述

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

输入描述:

输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果

输出描述:

输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1
示例1

输入

20

输出

3
//因为要袋子足够少,则原则上尽可能多买8个一袋的苹果。
#include<iostream>using namespace std; int maxPackage(int n){    int count = 0;  //袋子个数    int mul, remains;     if(n % 2 != 0) //如果n不为偶数,直接返回-1        return -1;    if(n % 8 == 0){         count = n / 8;        return count;    }    else{        mul = n / 8;  //8的倍数        remains = n % 8;        count += mul;        n = n % 8;        while(mul >= 0){            if(n % 6 == 0){                count += n / 6;                return count;            }            else{   //回溯                mul--;  //8包装袋-1                count --;  //袋子个数-1                n = n + 8;  //剩余苹果数量+8            }        }        return -1;    }}int main(){    int n;    cin >> n;    cout << maxPackage(n);    return 0;}
藏宝图

题目描述

牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t,根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字符串中是连续的,例如串 abc,它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种。

输入描述:

每个输入包含一个测试用例。每个测试用例包含两行长度不超过 10 的不包含空格的可见 ASCII 字符串。

输出描述:

输出一行 “Yes” 或者 “No” 表示结果。
示例1

输入

x.nowcoder.comooo

输出

Yes

思路:判断测试序列与原序列有多少位是相同的,如果相同的长度等于测试序列的长度,则该序列为原序列的子序列

#include<iostream>#include<string>using namespace std;int main(){    string str;    while(cin >> str){        string str1;        cin >> str1;        int a = 0, b = 0;        while(a < str.length()){            if(str[a++] == str1[b])                b++;        }        if(b == str1.length())            cout << "Yes" << endl;        else            cout << "No" << endl;    }}