Reputation: 19
I was trying to solve the hackerrank problem Between Two Sets.In the getTotalX() function of the code below,the output of the proggram is always empty (the count value always gives zero when I try to output it using cin). I can't understand the problem.Is there anything wrong with the declaration of the count variable?
#include <bits/stdc++.h>
using namespace std;
string ltrim(const string &);
string rtrim(const string &);
vector<string> split(const string &);
/*
* Complete the 'getTotalX' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER_ARRAY a
* 2. INTEGER_ARRAY b
*/
int getTotalX(vector<int> a, vector<int> b) {
sort(a.begin(),a.end());
sort(b.begin(),b.end());
int n1 = a.back();
int n2 = b.front();
cout<<n1<<n2<<endl;
int count=0;
for(int i=n1;i<=n2;i+=n1)
{
int flag = 1;
for(int j=0;j<a.size();j++ )
{
if (i % a[j])
{
flag =0;
break;
}
}
if (flag)
{
for(int j=0;j<b.size();i++)
{
if (b[j]%i)
{
flag = 0;
break;
}
}
}
if (flag)
count++;
}
return count;
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string first_multiple_input_temp;
getline(cin, first_multiple_input_temp);
vector<string> first_multiple_input = split(rtrim(first_multiple_input_temp));
int n = stoi(first_multiple_input[0]);
int m = stoi(first_multiple_input[1]);
string arr_temp_temp;
getline(cin, arr_temp_temp);
vector<string> arr_temp = split(rtrim(arr_temp_temp));
vector<int> arr(n);
for (int i = 0; i < n; i++) {
int arr_item = stoi(arr_temp[i]);
arr[i] = arr_item;
}
string brr_temp_temp;
getline(cin, brr_temp_temp);
vector<string> brr_temp = split(rtrim(brr_temp_temp));
vector<int> brr(m);
for (int i = 0; i < m; i++) {
int brr_item = stoi(brr_temp[i]);
brr[i] = brr_item;
}
int total = getTotalX(arr, brr);
fout << total << "\n";
fout.close();
return 0;
}
string ltrim(const string &str) {
string s(str);
s.erase(
s.begin(),
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))
);
return s;
}
string rtrim(const string &str) {
string s(str);
s.erase(
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
s.end()
);
return s;
}
vector<string> split(const string &str) {
vector<string> tokens;
string::size_type start = 0;
string::size_type end = 0;
while ((end = str.find(" ", start)) != string::npos) {
tokens.push_back(str.substr(start, end - start));
start = end + 1;
}
tokens.push_back(str.substr(start));
return tokens;
}
Upvotes: 0
Views: 399
Reputation: 483
Issues
i
inside inner for loops, but actually you are iterating, loop with variable j
flag==1
then you are incrementing count. But terminating whenever a number is divisible (that too any number in the array). This is against the hypothesis of the question Hint
1. If you observe point 1 and 2 in the given question, those are just another way of saying definitions for LCM and GCD
Suggestions based on the code you have written
1. Read the question clearly and solve using pen and paper.
2. Analyze the complexity of your solution and try to improve it. Here you have applied sorting + two for loops
3. Please avoid using i
, j
, k
these types of variables inside for loops. It is a very bad practice and more prone to errors.
Upvotes: 1