下厨房
题目描述
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输入描述:
每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
输出描述:
输出一行一个数字表示完成所有料理需要多少种不同的材料。
示例1
输入
BUTTER FLOUR HONEY FLOUR EGG
输出
4
#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 = 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 = “aba”,B = “b”。这里有4种把B插入A的办法:
* 在A的第一个字母之前: "baba" 不是回文
* 在第一个字母‘a’之后: "abba" 是回文
* 在字母‘b’之后: "abba" 是回文
* 在第二个字母'a'之后 "abab" 不是回文
所以满足条件的答案为2
输入描述:
每组输入数据共两行。 第一行为字符串A 第二行为字符串B 字符串长度均小于100且只包含小写字母
输出描述:
输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数
示例1
输入
aba b
输出
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.com ooo
输出
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;
}
}