(41)速算机器人
题目链接:速算机器人
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:
“A” 运算:使 x = 2 * x + y;
“B” 运算:使 y = 2 * y + x。
在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 A、B 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。
- 示例 1:
输入:s = “AB”
输出:4
解释: 经过一次 A 运算后,x = 2, y = 0。 再经过一次 B 运算,x = 2, y = 2。 最终 x 与 y 之和为 4。
提示:
0 <= s.length <= 10
s 由 ‘A’ 和 ‘B’ 组成
解题思路
遍历字符串,通过选择语句来决定走 A 运算还是B 运算
注意:字符串可能为空串
代码
int calculate(char* s) {
size_t len = strlen(s);
if(!len)
return 1;
int x=1,y=0;
for(int i=0;i<len;i++)
{
if('A' == s[i])
{
x = 2 * x + y;
}
else
y = 2* y + x;
}
return x+y;
}
(42)转换成小写字母
题目链接:转换成小写字母
给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。
-
示例 1:
输入:s = “Hello”
输出:“hello” -
示例 2:
输入:s = “here”
输出:“here” -
示例 3:
输入:s = “LOVELY”
输出:“lovely”
提示:
1 <= s.length <= 100
s 由 ASCII 字符集中的可打印字符组成
解题思路
首先要知道大写字母和小写字母的ASCII码值相差32。
于是我们就有了 大写字母+32=小写字母
法一:
遍历字符串,用选择语句判断当前字母是否为大写字母,如果是则将大写转化为小写字母
法二:
调用库函数<ctype.h>,使用isupper函数
字符函数 - isupper
原型:extern int isupper(int c);
用法:#include <ctype.h>
功能:判断字符c是否为大写英文字母
说明:当c为大写英文字母(A-Z)时,返回非零值,否则返回零。
代码
法一:
char* toLowerCase(char* s) {
int i = 0;
for(i=0;s[i];i++)
{
if(s[i]<='Z' && s[i]>='A')
s[i]+=32;
}
return s;
}
法二:
char* toLowerCase(char* s) {
int i = 0;
for(i=0;s[i];i++)
{
if(isupper(s[i]))
s[i]+=32;
}
return s;
}
(43)找出中枢整数
题目链接:找出中枢整数
给你一个正整数 n ,找出满足下述条件的 中枢整数 x :
1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。
返回中枢整数 x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中枢整数。
-
示例 1:
输入:n = 8
输出:6
解释:6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。 -
示例 2:
输入:n = 1
输出:1
解释:1 是中枢整数,因为 1 = 1 。 -
示例 3:
输入:n = 4
输出:-1
解释:可以证明不存在满足题目要求的整数。
提示:
1 <= n <= 1000
解题思路
1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。
运用等差数列求和公式把左右两式写出来
1 和 x 之间的所有元素之和:(x(x+1))/2
x 和 n 之间所有元素之和:(x+n)(n-x+1)/2
等差数列求和公式:
法一:
暴力解法
遍历1~n的所有数字,判断是否满足 (x(x+1))/2 = (x+n)(n-x+1)/2
法二:
用数学知识解决
化简等式
x^2=n(n+1)/2
代码
法一:
int pivotInteger(int n) {
//x^2=n(n+1)/2
int x = 0;
for(x=1;x<=n;x++)
{
if(((x+1)*x)/2 == (x+n)*(n-x+1)/2)
return x;
}
return -1;
}
法二:
int pivotInteger(int n) {
//x^2=n(n+1)/2
int x = sqrt(n*(n+1)/2);
if(x*x == n*(n+1)/2)
return x;
return -1;
}