JZ48 不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
输入
1,2
返回值
3
#include<iostream>
using namespace std;
int Add(int num1, int num2)
{
return (num2 == 0) ? num1 : Add(num1 ^ num2, (num1 & num2) << 1);
}
int main()
{
int num1, num2;
cin >> num1 >> num2;
cout << Add(num1, num2);
return 0;
}
JZ51 构建乘积数组
题目描述
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)
对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。
输入
[1,2,3,4,5]
返回值
扫描二维码关注公众号,回复:
12673610 查看本文章

[120,60,40,30,24]
#include<iostream>
#include<vector>
using namespace std;
vector<int> multiply(const vector<int>& A)
{
int length = A.size();
vector<int>B;
int mul = 1;
for (int i = 0; i < length; ++i)
{
mul *= A[i];
}
B.push_back(mul);
for (int i = 1; i < length - 1; ++i)
{
int sum = 1;
for (int j = 0; j < length; ++j)
{
if (i != j)
{
sum *= A[j];
}
}
B.push_back(sum);
}
int mul2 = 1;
for (int i = 0; i < length - 1; ++i)
{
mul2 *= A[i];
}
B.push_back(mul2);
return B;
}
int main()
{
vector<int>A = {
1,2,3,4,5 };
vector<int>result = multiply(A);
for (int i = 0; i < result.size(); ++i)
{
cout << result[i] << " ";
}
return 0;
}
JZ34 第一个只出现一次的字符
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
输入
“google”
返回值
4
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<map>
using namespace std;
int FirstNotRepeatingChar(string str)
{
map<char, int>m;
for (int i = 0; i < str.length(); ++i)
{
m[str[i]]++;
}
for (int i = 0; i < str.length(); ++i)
{
if (m[str[i]] == 1)
{
return i;
}
}
return -1;
}
int main()
{
string str;
cin >> str;
cout << FirstNotRepeatingChar(str);
return 0;
}