Cloudera Interview Question
Software Engineer / DevelopersCountry: United States
What about this one? Let me know if I have made any mistakes
public static void printDivisors(int n){
int m=0;
HashMap<Integer, Integer> ab=new HashMap<Integer, Integer>();
while(m<n/2){
m++;
if(n%m==0){
if(!ab.containsKey(n/m)){
ab.put(m, n/m);
}
}
}
Iterator x=ab.entrySet().iterator();
while(x.hasNext()){
Map.Entry numbers=(Map.Entry)x.next();
System.out.println(numbers.getKey());
System.out.println(numbers.getValue());
}
}
I know I am excluding the 1*n case, but that is trivial
vector < string> print_all_factorizations(int number)
{
vector<string> result ;
int j =number;
for(int i =1; i < j; i++)
{
if(number % i == 0)
{
j=number/i;
//cout << i << "*" << j << endl;
char buff[512];
sprintf(buff, "%i*%i",i,j);
result.push_back(buff);
if(j != number)
{
vector<string> subcall = print_all_factorizations(j);
for(int s =0; s < subcall.length; s++)
{
sprintf(buff, "%i*%i",i,subcall[s].c_str());
result.push_back(buff);
}
}
}
}
return result;
}
sorry, small correction
vector < string> print_all_factorizations(int number)
{
vector<string> result ;
int j =number;
for(int i =2; i < j; i++)
{
if(number % i == 0)
{
j=number/i;
//cout << i << "*" << j << endl;
char buff[512];
sprintf(buff, "%d*%d",i,j);
result.push_back(buff);
if(j != number)
{
vector<string> subcall = print_all_factorizations(j);
for(int s =0; s < subcall.size(); s++)
{
sprintf(buff, "%d*%s",i,subcall[s].c_str());
result.push_back(buff);
}
}
}
}
return result;
}
vector<vector<int>>factors(int num)
{
vector<vector<int>> result;
if(num==1)
{
result.push_back({1});
return result;
}
result.push_back({1,num});
for(int i =2; i< num;i++)
{
if(num%i==0)
{
int rest = num/i;
if(rest>=i)
{
//result.push_back(i,rest);
vector<vector<int>> restresult = factors(rest);
for(auto& item: restresult)
{
if(item[0]==1)
{
item[0]= i;
result.push_back(item);
}
else
{
if(i<= item[0])
{
item.insert(item.begin(),i);
result.push_back(item);
}
}
}
}
else
break;
}
}
}
vector<vector<int>>factors(int num)
{
vector<vector<int>> result;
if(num==1)
{
result.push_back({1});
return result;
}
result.push_back({1,num});
for(int i =2; i< num;i++)
{
if(num%i==0)
{
int rest = num/i;
if(rest>=i)
{
//result.push_back(i,rest);
vector<vector<int>> restresult = factors(rest);
for(auto& item: restresult)
{
if(item[0]==1)
{
item[0]= i;
result.push_back(item);
}
else
{
if(i<= item[0])
{
item.insert(item.begin(),i);
result.push_back(item);
}
}
}
}
else
break;
}
}
}
vector<vector<int>>factors(int num)
{
vector<vector<int>> result;
if(num==1)
{
result.push_back({1});
return result;
}
result.push_back({1,num});
for(int i =2; i< num;i++)
{
if(num%i==0)
{
int rest = num/i;
if(rest>=i)
{
//result.push_back(i,rest);
vector<vector<int>> restresult = factors(rest);
for(auto& item: restresult)
{
if(item[0]==1)
{
item[0]= i;
result.push_back(item);
}
else
{
if(i<= item[0])
{
item.insert(item.begin(),i);
result.push_back(item);
}
}
}
}
else
break;
}
}
}
}
Simple recursive approach
void subset_product(vector<int> nums, int target, int product, vector<int> &temp, int pos) {
if(target == product) {
result.push_back(temp);
return;
}
if(pos >= nums.size() || product > target)
return;
for(int i=pos; i<nums.size(); i++) {
temp.push_back(nums[i]);
subset_product(nums, target, product * nums[i], temp, i);
temp.pop_back();
}
}
int main() {
int arr[] = {2,3,4,5,6,7,8,9,10,11,12};
vector<int> nums (arr, arr + sizeof(arr)/sizeof(arr[0])) ;
vector<int> temp;
subset_product(nums, 12, 1, temp, 0);
return 0;
}
- loveCoding January 19, 2012