1.

public class Main {

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, SS11
* Problem: 640 Self Numbers
* Link: http://uva.onlinejudge.org/external/6/640.pdf
*
* @author Hidir Sayli
* @version 1.0, 4/2/2011
*
* Method : Ad-Hoc
* Status : Accepted
* Runtime: 1.076
*/

//Methode für Quersumme
public static int qsum(int n){
int num = n;
int qsum = 0;
while (num>0){
qsum += num%10;
num /= 10;
}

return qsum;
}


public static void main(String[] args) {

/* Es wird ein boolean array angelegt: auswertung, ob eine Zahl durch d(n) generiert worden ist oder nicht.
* nums[] wird an der Stelle auf "true" gesetzt, an der sich eine generierte Zahl befinden soll. Man stelle sich das Ganze wir eine
* Checkliste vor, die aus zwei Spalten besteht. Bspw. links die Zahl und rechts die Bewertung.
*/

boolean[] nums = new boolean[1000001];

for(int i=1;i<= 1000000;i++)
{
//erzeuge generierte Zahlen
int temp = i + qsum(i);

//setze entsprechende Stelle auf "true"
if(temp <= 1000000)nums[temp]=true;
}

for(int i=1;i<= 1000000;i++)
{
//die "nicht"-generierten Zahlen sind mit "false" gekennzeichnet und werden ausgegeben.
if(nums[i]==false)System.out.println(i);
}

}//main
}//class


---------------------------------------------------------------------------------------------

1.

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, WS10/11
* Problem: 640 - Self Numbers
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=8&problem=581&mosmsg=Submission+received+with+ID+8484787
*
* @author Manuel Hager
* @version 1.0, 01/02/2011
*
* Method : Ad-Hoc
* Status : Accepted
* Runtime: 0.248
*/

#include <iostream>
#include <vector>
#include <algorithm>
#define LIMIT 1000000 - 44

using namespace std;

vector<int> all;
int i, j, value, currValue, size;

int main(int argc, char* argv) {
//calculate all none self-numbers.
for(i = 1; i < LIMIT; i++) {
value = i;
for(j = i; j > 0; j /= 10) {
value += (j % 10);
}
all.push_back( value );
}
sort (all.begin(), all.end());

value = 1;
size = (int)all.size();

//calculate all self-numbers.
for(i = 0; i < size; i++) {
currValue = all[i];

while(value < currValue) {
cout << value++ << endl;
}
value = currValue + 1;
}
return 0;
}



2.

/**
* FWP, Ausgewählte Probleme aus dem ACM Programming Contest, SS10
* Problem: 640 Selfnumbers
* Link: http://uva.onlinejudge.org/external/6/640.html
*
* @author Barny Porcio
* @version 1.0, 07/01/2010
*
* Method : -
* Status : Accepted
* Runtime: 1.008
*/
public class selfnumbers {

/**
* @param args
*/
public static void main(String[] args) {
boolean[] array = new boolean[1000001];
for (int i = 1; i<array.length;++i){
int selfnum = i;
int temp = i;
while(temp != 0){
selfnum += temp%10;
temp /= 10;
}
if (selfnum < array.length)
array[selfnum] = true;
}
for (int i = 1; i < array.length; ++i){
if (!array[i])
System.out.println(i);
}
}

}