ย้อนกลับไปเมื่อสมัยประเทศไทยขายก๊วยเตี๋ยวชามละหนึ่งบาท วันที่ด.ญ.ติ๋ว ไปโรงเรียนวันแรก แม่เปรมจิตให้เหรียญบาท 1 เหรียญ วันถัดมาแม่ก็ให้เหรียญ
บาท 1 เหรียญอีก ปรากฎว่า ด.ญ.ติ๋ว ร้องไห้หนักมาก บอกว่าแม่ไม่เอาเหรียญบาทหนึ่งเหรียญแบบเดิม แม่จึงหยิบเหรียญห้าสิบสตางค์ไป 2 เหรียญ
ด.ญ.ติ๋ว จึงหยุดร้อง แล้วเดินทางไปโรงเรียน
ตอนเที่ยงของวันนั้นหลังจากทำงานบ้านเสร็จ แม่เปรมจิตคิดว่าต้องเตรียมเหรียญอย่างไรไม่ให้ซ้ำกับวันก่อนๆ เพื่อไม่ให้ลูกร้องในวันพรุ่งนี้และ
วันต่อๆไป และแม่ก็มองข้ามช็อทไปด้วยว่าค่าขนม 1 บาท จะให้แบบไม่ซ้ำกันได้ 4 วัน คือ
1. 1.00 x 1 2. 0.50 x 2 3. 0.25 x 4 4. 0.25 x 2 + 0.05 x 1
และแล้วแม่ก็เริ่มติดลม เริ่มคิดกรณีอื่นๆด้วย เช่นถ้าให้ลูก 1.25 บาทจะได้กี่วัน? แล้วถ้าเป็น 1.75 บาทล่ะ?
ช่วยแม่ของติ๋วนับวันที่จะให้เงินลูก ไปโรงเรียนโดยที่ลูกไม่ร้องไห้ โดยจะให้เฉพาะเหรียญสลึง เหรียญ 50 สตางค์ และเหรียญบาท
input
จำนวนเงินที่แม่ให้เป็นเลขที่หารด้วย 0.25 ลงตัว
output
จำนวนวันที่ให้เงินลูกโดยไม่ใช่เหรียญชุดเดิม
Sample Input
1.75
Sample Output
6
แล้วถ้ามันใส่ 3 แล้วผลออกมามันได้ 16 แต่ใช้เครื่องคิดเลขคิดได้ 11 อะครับมันติดตรงไหนหรอครับช่วยอธิบายโค้ดหน่อยได้ไหมครับพอดีไม่ค่อยเข้าใจ
import java.util.Scanner;
public class TestProject {
static int cnt = 0, n;
static double money;
static double[] x = {0.25, 0.5, 1.0, 5.0, 10.0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
money = sc.nextDouble();
n = (int) (money / 0.25);
double[][] A = new double[n][x.length];
for (int i = 0; i < n; i++) {
for (int j = 0; j < x.length; j++) {
A[j] = x[j];
}
}
day(A, 0, 0, 0);
System.out.println(cnt);
}
public static void day(double[][] A, double cur, int path, int j) {
for (int i = 0; i < x.length; i++) {
if (path + i >= n || j + i >= x.length) {
return;
}
double New = A[path + i][j + i] + cur;
if (New > money) {
return;
}
if (New == money) {
cnt++;
} else {
day(A, New, path + i, j + i);
}
}
}
}
มันติดตรงไหนอะครับโค้ดจาวาข้อนี้ช่วยแก้หน่อยนะครับช่วยอธิบายโค้ดด้วยนะครับ
บาท 1 เหรียญอีก ปรากฎว่า ด.ญ.ติ๋ว ร้องไห้หนักมาก บอกว่าแม่ไม่เอาเหรียญบาทหนึ่งเหรียญแบบเดิม แม่จึงหยิบเหรียญห้าสิบสตางค์ไป 2 เหรียญ
ด.ญ.ติ๋ว จึงหยุดร้อง แล้วเดินทางไปโรงเรียน
ตอนเที่ยงของวันนั้นหลังจากทำงานบ้านเสร็จ แม่เปรมจิตคิดว่าต้องเตรียมเหรียญอย่างไรไม่ให้ซ้ำกับวันก่อนๆ เพื่อไม่ให้ลูกร้องในวันพรุ่งนี้และ
วันต่อๆไป และแม่ก็มองข้ามช็อทไปด้วยว่าค่าขนม 1 บาท จะให้แบบไม่ซ้ำกันได้ 4 วัน คือ
1. 1.00 x 1 2. 0.50 x 2 3. 0.25 x 4 4. 0.25 x 2 + 0.05 x 1
และแล้วแม่ก็เริ่มติดลม เริ่มคิดกรณีอื่นๆด้วย เช่นถ้าให้ลูก 1.25 บาทจะได้กี่วัน? แล้วถ้าเป็น 1.75 บาทล่ะ?
ช่วยแม่ของติ๋วนับวันที่จะให้เงินลูก ไปโรงเรียนโดยที่ลูกไม่ร้องไห้ โดยจะให้เฉพาะเหรียญสลึง เหรียญ 50 สตางค์ และเหรียญบาท
input
จำนวนเงินที่แม่ให้เป็นเลขที่หารด้วย 0.25 ลงตัว
output
จำนวนวันที่ให้เงินลูกโดยไม่ใช่เหรียญชุดเดิม
Sample Input
1.75
Sample Output
6
แล้วถ้ามันใส่ 3 แล้วผลออกมามันได้ 16 แต่ใช้เครื่องคิดเลขคิดได้ 11 อะครับมันติดตรงไหนหรอครับช่วยอธิบายโค้ดหน่อยได้ไหมครับพอดีไม่ค่อยเข้าใจ
import java.util.Scanner;
public class TestProject {
static int cnt = 0, n;
static double money;
static double[] x = {0.25, 0.5, 1.0, 5.0, 10.0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
money = sc.nextDouble();
n = (int) (money / 0.25);
double[][] A = new double[n][x.length];
for (int i = 0; i < n; i++) {
for (int j = 0; j < x.length; j++) {
A[j] = x[j];
}
}
day(A, 0, 0, 0);
System.out.println(cnt);
}
public static void day(double[][] A, double cur, int path, int j) {
for (int i = 0; i < x.length; i++) {
if (path + i >= n || j + i >= x.length) {
return;
}
double New = A[path + i][j + i] + cur;
if (New > money) {
return;
}
if (New == money) {
cnt++;
} else {
day(A, New, path + i, j + i);
}
}
}
}