کمک در بهینه کردن برنامه ای که عدد چهار رقمی که جمع رقم های a+d = b+c برابر باشد
سلام من برای حل مسئله زیر کدی رو نوشتم که میدونم با این که جواب رو درست پاسخ میده ولی بهینه نیست کمکم کنید تا بهینش کنم
چاپ اعداد چهاررقمی که جمع رقم اول با رقم چهارم مساوی جمع رقم دوم و سوم باشد (a+d = b+c)
for (int i = 1000; i <= 9999; i++) {
int buffer = 0, result = 0, conter = 0, a = 0, b = 0;
while (conter < 5) {
conter++;
result = buffer % 10;
buffer /= 10 ;
if (conter == 1 || conter == 4) {
a = a + result;
}
if (conter == 2 || conter == 3) {
b = b + result;
}
if ( a == b && conter == 4) {
result = 0;
System.out.println(" عدد: " + i);
}
}
}
نقل قول: کمک در بهینه کردن برنامه ای که عدد چهار رقمی که جمع رقم های a+d = b+c برابر باشد
یه تلاش دیگه زدم به نظرتون از این بهترم میشه لطفا اگه میشه کمکم کنید
for (int i = 1000; i <= 9999; i++) {
int c = 0, d = 0, a = 0, b = 0;
a = i % 10;
b = (i-a) % 100 / 10;
c = (i-a-b) % 1000 / 100;
d = (i-a-b-c) % 10000 / 1000;
a += d;
b += c;
if (a == b){
System.out.println(" عدد: " + i);
}
}
نقل قول: کمک در بهینه کردن برنامه ای که عدد چهار رقمی که جمع رقم های a+d = b+c برابر باشد
یکسری عملیات اضافه داره که میتونید تصحیحش کردم و البته زمانش رو هم میتونید تست کنید. تصحیح ها: هیچ کدوم از تفریق ها لازم نیست چون عملیات عدد صحیحه و همچنین برای d نیازی به باقی مونده گرفتن نداره.
برای اینکه چاپ اسکرین تاثیر نداشته باشه هم کامنت کردم. هر چند اینقدر نباید رو بهینه بودن حساس بود در چند تا جمع و تفریق. با این حال:
public static void main(String[] args) { long ft, et;
int c = 0, d = 0, a = 0, b = 0;
for (int test = 0; test < 10; test++) {
ft = System.nanoTime();
for (int i = 1000; i <= 9999; i++) {
a = i % 10;
b = i % 100 / 10;
c = i % 1000 / 100;
d = i / 1000;
a += d;
b += c;
if (a == b) {
//System.out.println(i);
}
}
et = System.nanoTime();
System.out.println("Execution time (1): " + (et - ft) + " ns");
ft = System.nanoTime();
for (int i = 1000; i <= 9999; i++) {
a = i % 10;
b = (i - a) % 100 / 10;
c = (i - a - b) % 1000 / 100;
d = (i - a - b - c) % 10000 / 1000;
a += d;
b += c;
if (a == b) {
//System.out.println(" عدد: " + i);
}
}
et = System.nanoTime();
System.out.println("Execution time (2): " + (et - ft) + " ns");
}
}