目录
循环数比较
判断题
删除重复字符
题目描述:对于任意两个正整数x和k,我们定义repeat(x, k)为将x重复写k次形成的数,例如repeat(1234, 3) = 123412341234,repeat(20,2) = 2020.
牛牛现在给出4个整数x1, k1, x2, k2, 其中v1 = (x1, k1), v2 = (x2, k2),请你来比较v1和v2的大小。
输入描述:
输入包括一行,一行中有4个正整数x1, k1, x2, k2(1 ≤ x1,x2 ≤ 10^9, 1 ≤ k1,k2 ≤ 50),以空格分割
输出描述:
如果v1小于v2输出"Less",v1等于v2输出"Equal",v1大于v2输出"Greater".
示例:
输入:
1010 3 101010 2
输出:
Equal
解题代码一(自己,凉码):
#include
using namespace std;
int main(){
int x1,x2, k1, k2;
cin >> x1 >> k1 >> x2 >> k2;
long long res1 = 0;
long long res2 = 0;
int temp = 1;
int count1 = 1;
int count2 = 1;
//求x1的位数
while(temp){
temp = x1/10;
count1 = count1 * 10;
}
//求x2的位数
temp = 1;
while(temp){
temp = x2/10;
count2 = count2 * 10;
}
while(k1 != 0){
k1 = k1 - 1;
res1 = res1*count1 + x1;
}
while(k2 != 0){
k2 = k2 - 1;
res2 = res2*count2 + x2;
}
if(res1 == res2){
cout << "Equal" << endl;
}else if(res1 < res2){
cout << "Less" << endl;
}else if(res1 > res2){
cout << "Greater" << endl;
}
return 0;
}
解题思路:别看了,这个代码凉了。逻辑没问题,但过不了,复杂度太高。
解题代码二(输入数字转字符串):
#include
#include
using namespace std;
string int2str(int x){
stringstream ss;
ss << x;
return ss.str();
}
string repeat(string s, int k){
string ss = "";
while(k--){
ss += s;
}
return ss;
}
int main(){
int x1,x2, k1, k2;
cin >> x1 >> k1 >> x2 >> k2;
string s1, s2;
s1 = int2str(x1);
s2 = int2str(x2);
if(s1.length()*k1 < s2.length()*k2){
cout << "Less" << endl;
}else if(s1.length()*k1 > s2.length()*k2){
cout << "Greater" << endl;
}else{
s1 = repeat(s1, k1);
s2 = repeat(s2, k2);
if(s1.compare(s2) < 0){
cout << "Less" << endl;
}else if(s1.compare(s2) > 0){
cout << "Greater" << endl;
}else{
cout << "Equal" << endl;
}
}
return 0;
}
解题思路:
string x1, x2;
int k1, k2;
cin << x1 << x2 << k1 << k2;
知识点:
字符串函数:
string x, y;
- x+y:代表y拼接在x后面。
- x.push_back(y):出错,因为push_back(char x),只能加入字符。
- x.compare(y) :字符串比较函数,比较字符串(含纯数字)的大小。x.compare(y) <0 代表 x更小,>0 代表 x更大,=0代表x,y相等。
数字转字符串:
int2str 函数里的代码必须背熟练,这是数字转字符串的工具。
题目描述:牛牛参加了一场考试,考试包括n道判断题,每做对一道题获得1分,牛牛考试前完全没有准备,所以考试只能看缘分了,牛牛在考试中一共猜测了t道题目的答案是"正确",其他的牛牛猜为"错误"。考试结束后牛牛知道实际上n道题中有a个题目的答案应该是"正确",但是牛牛不知道具体是哪些题目,牛牛希望你能帮助他计算可能获得的最高的考试分数是多少。
输入描述:
输入包括一行,一行中有三个正整数n, t, a(1 ≤ n, t, a ≤ 50), 以空格分割
输出描述:
输出一个整数,表示牛牛可能获得的最高分是多少。
示例:
输入:
3 1 2
输出:
2
解题代码:
#include
using namespace std;
int main(){
int num, me_right, true_right;
int wrong;
int res;
cin >> num >> me_right >> true_right;
if(true_right > me_right){
wrong = true_right - me_right;
res = num - wrong;
}else if(true_right == me_right){
res = num;
}else{
wrong = me_right - true_right;
res = num - wrong;
}
cout << res << endl;
return 0;
}
解题思路:
题目描述:牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母'a'和字母'n'分别出现了三次和两次。但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。
输入描述:
输入包括一个字符串s,s的长度length(1 ≤ length ≤ 1000),s中的每个字符都是小写的英文字母('a' - 'z')
输出描述:
输出一个字符串,表示满足牛牛要求的字符串
示例:
输入:
banana
输出:
ban
解题代码:
#include
#include
解题思路: