نمی دونم چند درصد از برنامه نویسان این تالار تو مسابقات جاوا کاپ شرکت میکنند ولی یکسری مسابقات تستی هم داره که میتونین شرکت کنین خیلی خوب قدرت الگوریتم نویسی رو بالا میبره
خودم برای شروع دوتا از سوال هاشو که با روش خودم نوشتم میذارم خوشحال میشم دوستان نظر بدن ویا اگر بدرد شو خورد بهم بگه ممنون میشم
البته خیلی خیلی ساده هستند.
با تشکر
اعداد کامل کوچکتر از ۱۰,۰۰۰

public class CompleteNumber {

private static int sNum = 0 , cnt = 0;
private static Function<Integer , Boolean> sumFunc = FuncProc::sumNumber;
private static BiFunction<Integer,Integer,Boolean> mod = FuncProc::mod;

public static void main(String[] args) {
Consumer<Integer> cOut = System.out::println;

for (int i = 2; i < 10000; i++) {
if(sumFunc.apply(i)) cOut.accept(i);
sNum = 0; cnt = 0 ;
}

}

@Test
public void test1() {
assertEquals(sumFunc.apply(8),false);
assertEquals(sumFunc.apply(6),true);
assertEquals(sumFunc.apply(28),true);
}
private static class FuncProc {
//for loop algorithm
private static boolean sumNumber(int arg) {
int sNum = 0;
for (int i = 1; i < arg; i++) {
sNum += mod.apply(arg,i) ? i : 0;
}
return sNum == arg ;
}

//recursive algorithm
private static boolean sumNumber2(int arg) {
int i = (++cnt - arg + arg);
if(sNum== arg
&& i >= arg)
return true;
else if(sNum > arg)
return false;
sNum += mod.apply(arg,i) ? i : 0;
return sumFunc.apply(arg);
}

private static boolean mod(int a , int b) {
return a % b == 0 ;
}
}

اگر نخواستید متیونید Test هاشو غیر فعال کنید