Mar TopCoder

Whether you're a newbie or an experienced programmer, any questions, help, or just talk of any language will be welcomed here.

Moderator: Coders of Rage

Post Reply
User avatar
MarauderIIC
Respected Programmer
Respected Programmer
Posts: 3406
Joined: Sat Jul 10, 2004 3:05 pm
Location: Maryland, USA

Mar TopCoder

Post by MarauderIIC »

Figured I could post any Top Coder practice problems I do here.
Mind, I'm not supposed to be reproducing the problems. So if somebody cares let me know and I guess I can just delete this whole topic.

[sorry, deleted my 250 pt code...]
TopCoder Inv 2001 R1 500 pt (med) wrote:Problem Statement

***Note: Please keep programs under 7000 characters in length. Thank you


Class Name: SquareDigits
Method Name: smallestResult
Parameters: int
Returns: int

Define the function S(x) as the sum of the squares of the digits of x.
For example: S(3)=3*3=9 and S(230)=2*2+3*3+0*0=13.

Define the set T(x) to be the set of unique numbers that are produced by
repeatedly applying S to x. That is: S(x), S(S(x)), S(S(S(x))), etc...
For example, repeatedly applying S to 37:
S(37)=3*3+7*7=58.
S(58)=5*5+8*8=89.
S(89)=145.
S(145)=42.
S(42)=20.
S(20)=4.
S(4)=16.
S(16)=37.
Note this sequence will repeat so we can stop calculating now and:
T(37)={58,89,145,42,20,4,16,37}.
However, note T(x) may not necessarily contain x.

Implement a class SquareDigits, which contains a method smallestResult. The
method takes an int, n, as a parameter and returns the smallest int, x, such
that T(x) contains n.

The method signature is (be sure your method is public):
int smallestResult(int n);

TopCoder will ensure n is non-negative and is between 0 and 199 inclusive.

Examples:
If n=0: S(0) = 0, so T(0)={0}, so the method should return 0.

If n=2: T(0) through T(10) do not contain the value 2. If x=11, however:
S(11)=1*1+1*1=2, so T(11) contains 2, and the method should return 11.

If n=10: T(0) through T(6) do not contain 10. If x=7:
S(7)=49.
S(49)=97.
S(97)=130.
S(130)=10.
S(10)=1.
and it starts to repeat...
so T(7) is {49,97,130,10,1}, which contains 10, and the method should return 7.

n=1 -> x=1
n=19 -> x=133
n=85 -> x=5
n=112 -> x=2666
Definition

Class:
SquareDigits
Method:
smallestResult
Parameters:
int
Returns:
int
Method signature:
int smallestResult(int param0)
(be sure your method is public)

Code: Select all

#include <vector>
using namespace std;

class SquareDigits {
	public:
	int smallestResult(int n);
	int s(int x);
	vector<int>t;
	bool isMember(int test);
};

int SquareDigits::smallestResult(int n) {
	
	int x = 0;
	int sx;
	
	do {
		sx = s(x);
		do {
			t.push_back(sx);
			if (sx == n)
				break;
			sx = s(sx);
		} while (!isMember(sx));
		t.clear();
		x++;
	} while (sx != n);
	return x-1;
}

int SquareDigits::s(int x) {
	char buffer[8];
	int numDigits;
	int retval = 0;
	sprintf(buffer, "%i", x);
	numDigits = strlen(buffer);
	for (int i = 0;i < numDigits;i++) {
		retval += (buffer[i]-48)*(buffer[i]-48);
	}
	return retval;
}

bool SquareDigits::isMember(int test) {
	for (vector<int>::iterator it = t.begin();it != t.end();it++) {
		if (*it == test)
			return true;
	}
	return false;
}
SCORE: 297.98

I guess I could comment it if people need it... in competition though they remove pts for > 300 chars of useless nonfunctional code. Score based off time.
I realized the moment I fell into the fissure that the book would not be destroyed as I had planned.
kilgariff
Chaos Rift Newbie
Chaos Rift Newbie
Posts: 17
Joined: Wed May 07, 2008 8:45 pm
Current Project: ArkEngine, Regalia
Favorite Gaming Platforms: PC (Linux, Windows)
Programming Language of Choice: C++ and Assembly
Location: Scotland
Contact:

Post by kilgariff »

What exactly is TopCoder?

Also, is there a trial that doesn't go on a record or anything? :)
Carmack: "The most important thing is to try and learn things deeply. Don't try for a superficial knowledge of a lot of things. I've gotten where I am from knowing everything deeply, down to the lowest level."
Post Reply