PDA

View Full Version : کمک در بهینه کردن برنامه ای که عدد چهار رقمی که جمع رقم های a+d = b+c برابر باشد



reza_yki
یک شنبه 02 تیر 1398, 20:56 عصر
سلام من برای حل مسئله زیر کدی رو نوشتم که میدونم با این که جواب رو درست پاسخ میده ولی بهینه نیست کمکم کنید تا بهینش کنم
چاپ اعداد چهاررقمی که جمع رقم اول با رقم چهارم مساوی جمع رقم دوم و سوم باشد (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);
}
}
}

reza_yki
یک شنبه 02 تیر 1398, 21:24 عصر
یه تلاش دیگه زدم به نظرتون از این بهترم میشه لطفا اگه میشه کمکم کنید

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);
}
}

vahid-p
پنج شنبه 06 تیر 1398, 18:56 عصر
یکسری عملیات اضافه داره که میتونید تصحیحش کردم و البته زمانش رو هم میتونید تست کنید. تصحیح ها: هیچ کدوم از تفریق ها لازم نیست چون عملیات عدد صحیحه و همچنین برای 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");
}
}